使用 EVP_CIPHER 时可以设置零填充。
我知道默认填充EVP_EncryptInit_ex
已启用,并且它使用 PKCS 填充。
并且EVP_CIPHER_CTX_set_padding
您只能启用和禁用填充。
使用 EVP_CIPHER 时可以设置零填充。
我知道默认填充EVP_EncryptInit_ex
已启用,并且它使用 PKCS 填充。
并且EVP_CIPHER_CTX_set_padding
您只能启用和禁用填充。
正如维基百科正确指出的那样,零填充不是加密的标准化。如果明文可以以00
字节结尾,则可能不是确定性的。此外,如果明文包含整数个块,则存在添加附加块的实现,其他实现不添加附加块。
我没有在 EVP 密码套件中看到零填充,但是通过简单地自己执行填充然后禁用填充来实现自己非常简单。一种方法是将明文复制到零值块中,例如由memset
. 该方法的唯一问题是您不能简单地在填充模式之间切换,它仍然是一种特殊情况。
如果可能,请尝试改用 PKCS#7 兼容的填充方案。如果您必须使用零填充,请确保您可以检索明文的大小并提前定义是否添加了额外的零块(例如,PHP 没有,Bouncy Castle 有)。