当填充块用于加密时,OpenSSL::密码使用什么填充方案?文件含糊不清。
http://www.ruby-doc.org/stdlib-1.9.3/libdoc/openssl/rdoc/OpenSSL/Cipher.html#method-i-padding-3D
我需要使用不同语言的加密数据。我知道有很多种填充材料:
发布于 2013-07-25 23:50:52
你的第一个链接建议
有关进一步信息,请参见EVP_CIPHER_CTX_set_padding。
此页表示(强调地雷):
如果启用了填充(默认),那么EVP_EncryptFinal_ex()将加密最终‘’数据,即保留在部分块中的任何数据。使用标准块填充(也称为PKCS填充),将加密的最终数据写入out,其中应该有足够的空间容纳一个密码块。写入的字节数放在outl中。调用此函数后,加密操作将完成,不应进一步调用EVP_EncryptUpdate()。
该页面还包含一个指向您可能认为有帮助的其他信息的链接。
发布于 2013-07-26 00:13:43
PKCS#7/PKSC#5在CBC模式中非常常见。PKCS#5与PKCS#7相同,但PKCS#5仅指64位(8字节)块大小,因此对于AES-256是PKCS#7。
来自en.wikipedia.org/wiki/Padding_(cryptography)#PKCS7
01
02 02
03 03 03
04 04 04 04
05 05 05 05 05
etc.如果您的msg大小为16的倍数(AES中的块大小),则会再添加一个由16倍字节填充的块。
发布于 2013-07-26 13:43:23
您可以通过解密方法中的NoPadding设置的消息解密来确认正在使用的填充。它将通过任何填充,就好像它是实际消息的一部分一样。查看消息中最后一个块的字节值。这将告诉您发送方正在使用何种类型的填充。然后将您的解密函数设置为期望这种填充类型。
https://stackoverflow.com/questions/17870502
复制相似问题