首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >blowfish和twofish是逐字节加密的吗?

blowfish和twofish是逐字节加密的吗?
EN

Stack Overflow用户
提问于 2012-08-13 02:58:30
回答 3查看 477关注 0票数 0

我正在通过网络接收数据包。但其中一些数据包具有动态长度,因此第二个字节具有包含长度的2字节长的字。所以我先接收包的编号,然后根据长度接收所有的包。当没有加密的时候,这里一切都好。如果我使用twofish或blowfish加密会是一样的吗?我的意思是,'A‘被加密为'B’,但'AA‘会被加密为'BB’吗?能否从使用TF/BF加密的数据包中提取一个字节并对其进行整体解密?

EN

回答 3

Stack Overflow用户

发布于 2012-08-13 03:17:47

我的意思是,'A‘被加密为'B’,但是'AA‘会被加密为'BB’吗?

明智的加密算法永远不会做到这一点,否则加密的信息很容易被频率分析破解。(顺便说一句,这被称为substitution cipher )。对于blowfishtwofish来说,这当然是真的。

即使你想提取中间的一个字节,你也必须首先解密整个包。

*:除非您使用弱ECB mode,它只将两种加密算法简化为64位/128位块的替换密码)。

票数 1
EN

Stack Overflow用户

发布于 2012-08-13 03:27:01

通常,答案是填充加密数据。然而,在达到块长度之前,不要仅仅通过添加0来填充;填充可能会泄露一些太多的信息。

至于提取一个字节,取决于所使用的密码模式-密码如何在块之间更改-您应该无法做到这一点。你需要解密所有你想要读取的字节。通常的做法是加密是“透明的”-即你做你的网络编程,然后在上面贴上SSL,这样SSL就可以处理所有的加密,处理可变长度等,而你只需要处理普通的旧数据。

至于在你的设计中使用SSL是否是一个好主意,我不知道,但你可以使用这个概念。

票数 1
EN

Stack Overflow用户

发布于 2012-08-30 05:59:05

Twofish在其基本级别上对16字节块进行编码。因此,您可以拥有的Twofish加密数据的最小长度为16字节。如果您的数据包含该长度,则可以对其进行解密,然后丢弃最后一个块中的任何额外字节。

因此,要加密'A‘,你需要将它填充到16字节(不知何故-有多种方式-全零显然不是最好的方式),然后加密你的1个字节的数据和15个不需要的字节。你会得到一个16字节的加密块。在解密时,您可以丢弃额外的字节。

我建议花半个小时阅读维基百科上的这些文章:

http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation

http://en.wikipedia.org/wiki/Padding_%28cryptography%29

他们两个都对我有帮助。

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

https://stackoverflow.com/questions/11924926

复制
相关文章

相似问题

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