首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用openssl填充AES cfb IV?

如何用openssl填充AES cfb IV?
EN

Cryptography用户
提问于 2015-05-05 08:05:42
回答 1查看 2.5K关注 0票数 1

从我读过的一些文档和一些关于填充的问题来看,我认为如果我传递一个小于块大小的加密文本,openssl将按每个PKCS7填充它。并将填充的加密文本用作下一个数据块的IV。

但当我遵循示例 (改为cfb)时,我注意到在解密中,EVP_DecryptUpdate后的ctx->iv是加密文本填充的最后一部分,我无法理解。

代码语言:javascript
复制
ciphered text (hex): db 11 d7 9c a8 f2 1c 29 07 dc 6d 62 13 7a 5e bf 3a c2 fa 2f a1 0f 73 90 ae bd cf 57 cf 1f 82 a2 24 ac d1 de 29 6a e2 95 9c 0f ec
IV after decrypt (hex): 24 ac d1 de 29 6a e2 95 9c 0f ec 9a 95 f0 e3 14

那么"9a 95 f0 e3 14“从何而来呢?

EN

回答 1

Cryptography用户

回答已采纳

发布于 2015-05-05 09:41:16

密码反馈模式将分组密码(AES)转化为自同步流密码,将完整的密文块反馈给下一个IV。

如果您对小于块大小的倍数进行加密,它将不会使用所有块密码输出来创建加密文本,只需要它所需的数量。因此,也不需要填充物。但是,它仍然需要块密码的全部输出来“反馈”并创建更多的流输出。

在您的例子中,密文块是:

代码语言:javascript
复制
db 11 d7 9c a8 f2 1c 29 07 dc 6d 62 13 7a 5e bf 
3a c2 fa 2f a1 0f 73 90 ae bd cf 57 cf 1f 82 a2
24 ac d1 de 29 6a e2 95 9c 0f ec

如您所见,最后一个文件在0xEC之后被截断,因为它不需要它。块密码输出流的其余5个字节是下一个IV的最后5个字节。实际上,如果您决定使用相同的流加密更多的数据,那么这5个字节将是针对明文创建密文的XORed,这将在反馈到分组密码之前对它们进行更改。

CFB、OFB和CTR模式是流密码模式,因此不需要填充。没有什么可以阻止您强制填充,但与欧洲央行/CBC模式不同的是,您不需要它来处理不是块大小倍数的数据。

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

https://crypto.stackexchange.com/questions/25434

复制
相关文章

相似问题

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