为什么js的AES的加密每次得到的结果都不一样,并且无法在后端被java正常解密呢?
StupidBear
·
2026-04-25
·
via SegmentFault 最新的问题
先说需求,需要前端对字符串 " username-timestamp "进行加密,需要后端解密后检验合法性。 加密方式是AES/ECB/Pkcs7 让AI帮我写了如下代码 import CryptoJS from 'crypto-js' const pwd = 'thisisapassword!' const test = "张三-1777050437277"; const paddedData = CryptoJS.pad.Pkcs7.pad(CryptoJS.enc.Utf8.parse(test)); const encryptedData = CryptoJS.AES.encrypt(paddedData, pwd, { mode: CryptoJS.mode.ECB }); const encryptedString = encryptedData.toString(); console.log(encryptedString) // 以其中某个输出为例 U2FsdGVkX18nUMBHmMlAXnrEJ99KBljWfRhokn41hJw= 找了个在线AES加解密工具测试了一下 链接A-https://www.jijie.ink/tool/aes OK能解出来,妥了,代码提交。 然后后台拿我数据测试,一测,跑过来和我说 “大哥你这加密不对啊我解不出来。” 并且“啪”甩我一个链接 链接B-http://tool.chacuo.net/cryptaes “你自己试试看看。” 然后我就发现,同样的加密模式,同样的填充方式,同样不加偏移,同样输出base64, 以及同样的秘钥和加密文本 为什么这两个网站,加密得到的数据居然不一样?! 而且更离谱的是,明明我都没有加偏移量, 我的代码和链接A,每次加密得到的字符串居然也不一样!? 而且不一样的加密数据居然还能解密出同样的原文。 太迷惑了,AI解决不了我的困扰。 我现在想知道,AES加密,除了加密模式、填充方式、偏移和输出外,还有其他变量能影响加密结果吗? 我又应该如何修改我的代码,能让js的加密在后端正常解密呢?
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。