关于 AES 解密的问题

2018-11-23 18:18:32 +08:00
 mdlcw
代码如下。网页在线可以解出明文为 123456789,但我用 openssl 库却解不出来,困扰一天了,有没有人能解答一下。(密钥是某个字符串的 md5 值,用这个密钥自己加密解密是没问题的,就是加密出来的密文跟代码中的密文不一样就是了。感觉是密钥转换有问题,但是就是不知道问题出在哪里。)

int main(void)
{
AES_KEY aes;
char *key = "417490bbe32b07f6ee822f668a999046"; // 密钥
unsigned char key_hex[16] = {0};
char *ciphertext = "fcdcf51343011f7383e8e2aa1160d9d4"; // 密文
unsigned char cipher_hex[32] = {0};
char plaintext[32] = {0}; // 明文
int len = 0;

// 设置 key
StrToHex(key_hex, key, 16);
AES_set_encrypt_key(key_hex, 128, &aes);

// 解密
StrToHex(cipher_hex, cipher, 16);
AES_ecb_encrypt(cipher_hex, plaintext, &aes, AES_DECRYPT);
}
3065 次点击
所在节点    程序员
9 条回复
KomeijiSatori
2018-11-23 19:54:10 +08:00
感觉可能是 加密模式的问题(
zbinlin
2018-11-23 19:57:32 +08:00
最好把网站的链接,跟在网站上进行解密的相关字段贴出来
rebackhua
2018-11-23 20:00:57 +08:00
aes 也有不同的模式的,以及填充方式
xiangyuecn
2018-11-23 20:31:09 +08:00
AES 有个用来搞笑的 IV 这玩意,如果只保存密码,使用错误的 IV,哈哈,原文 123 可以解码成 456,而且这个错误结果还是合法的

试验一下:





#3 的填充方式也是个问题
zbinlin
2018-11-23 20:46:15 +08:00
@xiangyuecn 如果是楼主给出的代码,使用 ECB 模式,是不需要 IV 的。
liuminghao233
2018-11-23 20:46:27 +08:00
@xiangyuecn 用 gcm 就好了
xiangyuecn
2018-11-23 21:15:06 +08:00
@zbinlin
@liuminghao233
嘿嘿,自从前端用了 CryptoJS,后端成了万年不变 CBC+PKCS7。刚研究了一下 ECB 凉凉

补一个发现:IV 错了解码时候有时不能解码,间歇性的抽风,大部分时候还是能解码的只是结果是错的
masterjoess
2018-11-23 21:47:02 +08:00
你用的在线加密网站 AES 不标准
给你两个没有 padding 参数的在线加密参考一下
https://gchq.github.io/Cyber ​​ Chef/
http://aes.online-domain-tools.com/
mdlcw
2018-12-13 10:54:54 +08:00
找到问题所在了,服务器加密用的 aes256 位,规范文档写的 aes128,太坑了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/510894

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX