我正在尝试使用 openssl 的 aes 实现。加密和解密工作正常,但是当我将密文与在线实现进行比较时,它们不匹配。
openssl aes-256-cbc -a -e -K 00000000000000000000000000000000 -iv 00000000000000000000000000000000 -in plain.txt -out encrypted.txt
纯文本.txt:
0xf34481ec3cc627bacd5dc3fb08f273e6
加密.txt:
wrTS5lZ9x6qbwhLcgOffiLA5I25M1HBy81jjcg9SyAW2aCMcYElmaWW7fV9dBiwY
在线 AES:
OpenSSL 输出采用 base64 编码格式(因为有 -a 标志)。如何以十六进制格式获取?(AES 没有 -hex 标志)
编辑:即使按照 muru 的建议使用 hexdump,加密文本也与 online-domain-tools.com 不同(见屏幕截图)。我是不是漏掉了什么?
答案1
反之亦然,我测试了您的加密文本以返回纯文本。从 base64 到十六进制,然后使用您提供的密钥和 iv 进行转换。返回的纯文本与您在此处定义的不同。请确保 iv 和密钥是正确的。我用我拥有的密钥和 iv 检查了其他密码和纯文本。在线工具提供了正确的。谢谢。
答案2
您使用的在线计算器是 128 位的,并且您从 Openssl 获得了 256 位加密。
明文文件必须是二进制,而不是十六进制。
要更改文件;在 Mac 中,一种简单的方法是使用“Hex Friend”;文件将如下所示:“ÛDÅÏ<∆'∫Õ]√˚ÚsÊ”。获得文件后,使用此命令:
openssl enc -aes-128-ecb -K 00000000000000000000000000000000 -in plain.txt -out encrypted.txt
然后仔细检查你的答案:
xxd encrypted.txt
如果您真的对 AES 实现感兴趣,请查看此网站:AES 加密
这是屏幕截图:只看文件的第一行!