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