我确定我想念一些东西,但是我正在努力了解什么!
我在此网站上使用AES-256在线加密一个虚拟字符串:
https://www.devglan.com/online-tools/aes-encryption-decryption
具有以下参数:
输出(Base64格式)为:
g + rR + egh2MCHFnYe0XJM7g ==
当我尝试使用openssl从命令行解密时:
echo g+rR+egh2MCHFnYe0XJM7g== | openssl enc -aes256 -d -out secret.dec -K 3B1C2DDAA872F28A4CDCB3324394569B -iv 0
我收到此错误:
bad decrypt
4780398188:error:06FFF06D:digital envelope routines:CRYPTO_internal:wrong final block length:Sources/libressl/libressl-22.240.1/libressl-2.6/crypto/evp/evp_enc.c:524:
答案 0 :(得分:1)
将密钥和IV转换为十六进制。
echo g+rR+egh2MCHFnYe0XJM7g== | openssl enc -d -a -aes-256-cbc -nosalt -out deco.dec -p -K 3342314332444441413837324632384134434443423333323433393435363942 -iv 30303030303030303030303030303030
OpenSSL需要十六进制的密钥和IV。当您将密钥作为 3B1C2DDAA872F28A4CDCB3324394569B 提供时,将其填充以其他零以使其成为
“ 3B1C2DDAA872F28A4CDCB3324394569B00000000000000000000000000000000000000”。
类似地,IV转换为
“ 00000000000000000000000000000000000000”。
因此,即使您提供了正确的密钥,OpenSSL最终还是使用了错误的密钥和IV,并且解密失败。
注意:通过标志“ -p”和openSSL将显示所使用的Key和IV。