我想用AES 128位算法解密一个crypt文件而不填充:IV(初始向量)和密钥长度为16个字节。 我可以使用OpenSSL来做到这一点,但我不会使用它来比较结果。 我的主要问题不是取消加密文件的填充,而是重新生成它,我不知道该怎么做,OpenSSL就是这样做的。 例如,在19字节的文件上,crypt文件上的填充将是13个字节长,因此crypt文件将保存为32个字节长,但我想删除它。是否有一些功能可以添加到我必须使用的C / C ++程序中?
编辑:请不要快速回答我的问题,这段代码不会在电脑上使用,而是在一张小电子卡上使用,而且我没有一些有用的命令;这是一个轻巧的Linux操作系统
AES块长度为16个字节,因此当最后一个块不是16个字节时需要填充
由于
答案 0 :(得分:0)
密文未填充 - 明文被填充,因此它们是加密算法的有效输入。
AES算法要求输入为16字节块的整数,其输出长度与输入相同。
因此,对于您的19字节纯文本文件,您用于加密的任何工具都是:
重要信息在密文的32个字节之间均匀分布,因此无法修改密文而不会使其无效。
最后,当你解密时,你需要:
您的问题的措辞表明您已经知道如何解密,并且删除填充是问题所在。
那么,你怎么知道修剪多少字节?这取决于使用什么填充方案来创建它。 There are many - see Wikipedia
一种常见的填充方案是PKCS#7,其中填充字节都具有 n 的值,其中 n 是添加的字节数。因此在您的示例中,13个字节的填充字节都具有值13.要删除它,只需读取最后一个字节,然后修剪该字节数。
(请注意,在PKCS#7中,一个已经是整数个块的输入,将添加一个额外的块,每个字节设置为16个。)
但是,不要假设你的加密端正在使用PKCS#7 - 确定无误。要么通过查看正在进行加密的文档/来源,要么通过解密和检查仍然填充明文的内容来实证。