我确定我错过了一些东西,但我很难理解什么!
我使用AES-256在这个网站上在线加密一个虚拟字符串:
https://www.devglan.com/online-tools/aes-encryption-decryption
使用以下参数:
输出(Base64格式)是:
克+ 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:
将Key和IV转换为HEX。
echo g+rR+egh2MCHFnYe0XJM7g== | openssl enc -d -a -aes-256-cbc -nosalt -out deco.dec -p -K 3342314332444441413837324632384134434443423333323433393435363942 -iv 30303030303030303030303030303030
OpenSSL期望HEX中的Key和IV。当你提供Key为3B1C2DDAA872F28A4CDCB3324394569B时,它会添加一个额外的零来实现它
“3B1C2DDAA872F28A4CDCB3324394569B00000000000000000000000000000000”。
类似地,IV被转换为
"00000000000000000000000000000000".
因此,即使您提供了正确的密钥,OpenSSL最终也会使用错误的密钥和IV并且解密失败。
注意:传递标志“-p”和openSSL将显示使用的键和IV。