JavaScript AES加密显示针对Java Android的错误结果

问题描述 投票:0回答:1

我尝试使用JavaScript中的AES方法转换字符串,也只需要使用CryptoJs库即可实现。

[当我从该网站在线尝试时,结果如预期的那样,我的Java程序可以解密它,但是当我尝试JavaScript时,却没有从该网站获得的结果。

这是我需要的;

数据:{"test":1}机密:NdRgUkXp2s5v8y/A

结果应为:chib8X9Fnr7Vtn4VLRybKg==

我指的是网站的原因,我不知道上面结果的模式和填充方法,但是下面的结果显示为服务器预期的结果,如果您知道上面结果的模式,您也可以参考。

您可以使用https://www.devglan.com/online-tools/aes-encryption-decryption引用在线加密进行验证。

这是我使用JavaScript错误时得到的;

var encrypted = CryptoJS.AES.encrypt('{"test",1}', "NdRgUkXp2s5v8y/A");
console.log(encrypted.toString()) 

结果:U2FsdGVkX1/GS5CecHJ10Z4qvSP8hY1NkDNtKGlg3OE=每次生成时,它也会更改。

我使用这个库https://cryptojs.gitbook.io/docs/

javascript encryption aes cryptojs
1个回答
0
投票

您将纯字符串值作为秘密而不是UTF-8编码的文本进行传递,并且使用ECB模式使用PKCS7填充方法对从上述网站获得的值进行加密。通常,这是大多数Android Java加密方法支持的方法。

<< [加密使用CryptoJS.pad.Pkcs7并确保将密码作为UTF-8提供为CryptoJS.enc.Utf8.parse(key),而不是以纯文本形式提供。

let data = '{"test":1}' let key = 'NdRgUkXp2s5v8y/A' var encrypted = CryptoJS.AES.encrypt(data, CryptoJS.enc.Utf8.parse(key), { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }); console.log(encrypted.toString());

解密方法

var decrypted = CryptoJS.AES.decrypt(encrypted.toString(), CryptoJS.enc.Utf8.parse(key), { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }) console.log(decrypted.toString(CryptoJS.enc.Utf8))
下面的示例证明加密值符合预期。 

let data = '{"test":1}' let key = 'NdRgUkXp2s5v8y/A' /* * Encryption */ var encrypted = CryptoJS.AES.encrypt(data, CryptoJS.enc.Utf8.parse(key), { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }); console.log(encrypted.toString()); /* * Decryption */ var decrypted = CryptoJS.AES.decrypt(encrypted.toString(), CryptoJS.enc.Utf8.parse(key), { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }) console.log(decrypted.toString(CryptoJS.enc.Utf8) + "\n")
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.0.0/crypto-js.min.js"></script>
© www.soinside.com 2019 - 2024. All rights reserved.