首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >填充加密算法

填充加密算法
EN

Stack Overflow用户
提问于 2008-10-03 23:39:43
回答 4查看 2.1K关注 0票数 3

我正在写一个XXTEA加密算法的实现,它在“流”上工作,即可以像这样使用: crypt mykey < myfile >输出。

其中一个必要条件是它根本没有访问文件的权限(在找到EOF之前,它只读取固定大小的块)。该算法要求数据字节数是4的倍数,因此需要增加一个填充。

对于纯文本,一个很好的解决方案是用NULL填充,在解密时只需忽略NULL,但同样的策略不能用于二进制流(可以包含嵌入的NULL)。

我读过常见的解决方案,比如填充缺少的字符数(如果缺少3个字符,则在末尾添加3,3,3)等等,但我想知道:有没有更优雅的解决方案?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2008-10-14 15:54:52

阅读这个问题,它看起来安全方面是没有意义的。简单地说,您有一个api,它需要4字节的倍数作为输入,但您并不总是这样。

如果你不能保证二进制流不关心,那么在二进制流上追加3个字节是很危险的。将0附加到exe文件的末尾并不重要,因为exe文件具有指定所有剩余位的相关大小的头。将0附加到pcx文件的末尾会破坏它,因为pcx文件有一个从文件末尾开始的特定字节数的头。

所以实际上你别无选择--你没有可以使用的魔术填充字节的选择,这些字节保证永远不会自然地出现在二进制流的末尾:你必须总是附加至少一个描述所使用的填充字节的额外的dword信息。

票数 2
EN

Stack Overflow用户

发布于 2008-10-03 23:44:52

阅读:http://msdn.microsoft.com/en-us/library/system.security.cryptography.paddingmode.aspx

它有一个常见填充方法的列表,例如:

PKCS7 - PKCS #7填充字符串由一个字节序列组成,每个字节都等于添加的填充字节总数。

ANSIX923填充字符串由长度前用零填充的字节序列组成。

ISO10126填充字符串由长度之前的随机数据组成。

示例:

原始数据: 01 01 01

PKCS #7: 01 01 01 03 03 03

ANSIX923 01 01 01 00 00 03

ISO10126: 01 01 01 CD A9 03

票数 4
EN

Stack Overflow用户

发布于 2008-10-03 23:52:44

阅读ciphertext stealing上的内容。它可以说比纯文本填充要优雅得多。另外,我建议使用大于4字节的块大小-- 64位可能是最小的。

严格地说,do密码术是一个危险的想法;很难击败整个密码界已经尝试过但失败了的算法。享受乐趣,并考虑阅读this,或者至少阅读Schneier的“相关阅读”部分的内容。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/169334

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档