我尝试使用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=
每次生成时,它也会更改。
您将纯字符串值作为秘密而不是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>