AES填充模糊

dan*_*705 1 encryption aes padding encryption-symmetric

我一直在用C语言实现AES,现在我正在通过实现填充来完成程序.阅读关于填充主题的许多其他SO问题我发现,一种流行的方法是通过填充州内剩余的每个地方剩下的地方数量.例如,如果我只有12个字节要加密,我会用4填充剩余的4个字节.我的问题是在解密时如果我有一个已满但是以1结尾的块,我怎么知道这是否是一个字节的填充或只是值1?

免责声明:我知道这个程序永远不应该用于生产,因为它可能有各种不同的不安全感.我这样做是为了好玩,而不是加密绝密文件.

Art*_* B. 5

你所描述的是PKCS#7填充.

为了消除歧义,您总是需要填充.此外,ECB或CBC模式等模式的明文需要是块大小的倍数.

两个约束组合在一起导致一个简单的解决方案:您总是将填充添加到块大小的下一个倍数.如果明文已经是块大小的倍数,那么您添加一个完整的填充块,其中每个字节代表16(对于AES).