AES/CBC/PKCS5P在Ruby中的添加实现(用于rails)

AES/CBC/PKCS5P在Ruby中的添加实现(用于rails),ruby,aes,pkcs#7,pkcs#5,Ruby,Aes,Pkcs#7,Pkcs#5,我需要解密使用AES/CBC/PKCS5P加密的文本。我得到的加密文本是使用一些Java软件生成的 下面的所有值都被我更改为虚构的值 我得到的是一个密钥(256位=32个字符*8位) 和IV:RXYOKS3C8HRSL2P(16位) 并且(我假设)Base64编码的加密结果ETlAHS5ZcshKxQUaHVB8== 我需要的是在Ruby中解密这个ETlAHS5ZcshKxQUaHVB8==,得到一个简单的字符串,比如'blablabla' 我试图用Ruby和普通的linux控制台openssl

我需要解密使用AES/CBC/PKCS5P加密的文本。我得到的加密文本是使用一些Java软件生成的

下面的所有值都被我更改为虚构的值

我得到的是一个密钥(256位=32个字符*8位) 和IV:
RXYOKS3C8HRSL2P
(16位)

并且(我假设)Base64编码的加密结果
ETlAHS5ZcshKxQUaHVB8==

我需要的是在Ruby中解密这个
ETlAHS5ZcshKxQUaHVB8==
,得到一个简单的字符串,比如'blablabla'

我试图用Ruby和普通的linux控制台openssl命令来解密我得到的东西。 注:下面的键和IV不是实际代码中使用的键:

# require 'openssl'
# require 'base64'
# decryption
aes = OpenSSL::Cipher::AES256.new(:CBC)
aes.decrypt
aes.padding = 1 # actually it's on by default
aes.key = "aHjgYFutF672eGIUGGVlgSETyM9VJj0K"
aes.iv="rxYoks3c8hRRsL2P"
aes.update(Base64::decode64("ETlAHS5ZcshKxQUaHVB8=="))+aes.final
=> OpenSSL::Cipher::CipherError: bad decrypt
与上述相同,但在控制台中,键和iv转换为十六进制:

$ echo -n $key256 | hexdump -e '16/1 "%02x"'
$ echo -n $iv     | hexdump -e '16/1 "%02x"'

$ echo "ETlAHS5ZcshKxQUaHVB8==" | openssl enc -d -aes-256-cbc -a  -K 61486a675946757446363732654749554747566c67534554794d39564a6a304b -iv 7278596f6b73336338685252734c3250
bad decrypt
140378046432928:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:evp_enc.c:539:
顺便说一句,要在控制台中取回原始密钥和iv,您可以使用:

$ echo 61486a6... | xxd -r -p
#or , but then need to add \x before every character pair
$ eval `printf "\x61\x48......"
请给我一些线索,因为我希望在一开始,我将能够使用宝石。gem看起来不错,它只是
OpenSSL::Cipher::Cipher
的一个很好的包装器


ruby/openssl是否可能使用不同的PKC,比如说PKCS#7,Java使用PKCS#5,我需要预处理我的数据?或者ruby/openssl与Java的PKCS#7和#5之间存在vesion不匹配#5表示8字节的数据块,#7表示16字节的数据块?只是胡乱猜测…

我第一篇文章中的Ruby代码是正确的,问题是Java部件使用的
AES/CBC/PKCS5Padding


Java程序不应将此方案用于
AES-CBC-256
PKCS5
pad为64位(8字节)块大小,但
AES-256-CBC
使用16字节块。因此,必须使用PKCS7。

您看过这个吗?当然,问题是我无法使用Ruby和/或命令行openssl对Java加密(AES/CBC/PKCS5)文本进行解密。我得到“坏解密”错误。我的Ruby代码或从bash控制台启动的openssl是否可能使用PKCS#1,其工作方式与PKCS#5不同?更新了我的第一篇文章,对该问题进行了更详细的说明。我面临着同样的问题。你对rubycode做了哪些更改?还是你刚刚更改了Java代码?@NicolasGUILLAUME如上所述,Java代码已被修改。