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

JavaScript AES加密显示针对Java Android的错误结果,javascript,encryption,aes,cryptojs,Javascript,Encryption,Aes,Cryptojs,我尝试在JavaScript中使用AES方法转换字符串,而且我只需要使用CryptoJs库来实现这一点 当我从这个网站在线尝试时,结果正如我预期的那样,我的Java程序可以对其进行解密,但当我尝试JavaScript时,我没有得到与从该网站获得的相同的结果 这就是我需要的 数据:{“测试”:1} 秘密:NdRgUkXp2s5v8y/A 结果应该是:chib8X9Fnr7Vtn4VLRybKg== 我之所以提到这个网站,我不知道上面结果的模式和填充方法,但是下面的结果是按照服务器的预期显示的,如果

我尝试在JavaScript中使用AES方法转换字符串,而且我只需要使用CryptoJs库来实现这一点

当我从这个网站在线尝试时,结果正如我预期的那样,我的Java程序可以对其进行解密,但当我尝试JavaScript时,我没有得到与从该网站获得的相同的结果

这就是我需要的

数据:
{“测试”:1}

秘密:
NdRgUkXp2s5v8y/A

结果应该是:
chib8X9Fnr7Vtn4VLRybKg==

我之所以提到这个网站,我不知道上面结果的模式和填充方法,但是下面的结果是按照服务器的预期显示的,如果你知道上面结果的模式,你也可以参考

您可以使用联机加密进行验证

这就是我使用JavaScript时得到的结果,这是错误的

var encrypted = CryptoJS.AES.encrypt('{"test",1}', "NdRgUkXp2s5v8y/A");
console.log(encrypted.toString()) 
结果:
U2FsdGVkX1/gs5echj10z4qvsp8hy1nkdntkglg3oe=
每次生成时它也会更改


我使用此库

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

加密使用
CryptoJS.pad.Pkcs7
并确保您以
UTF-8
as
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'
/*
*加密
*/
var encrypted=CryptoJS.AES.encrypt(数据,CryptoJS.enc.Utf8.parse(密钥){
模式:CryptoJS.mode.ECB,
填充:CryptoJS.pad.Pkcs7
});
console.log(加密的.toString());
/*
*解密
*/
var decrypted=CryptoJS.AES.decrypt(encrypted.toString(),CryptoJS.enc.Utf8.parse(key){
模式:CryptoJS.mode.ECB,
填充:CryptoJS.pad.Pkcs7
})
console.log(解密的.toString(CryptoJS.enc.Utf8)+“\n”)

打印解密字符串时,不要忘记添加 .toString(CryptoJs.enc.utf8)


顺便问一下,为什么要使用cryptoJS而不是本机Web CryptoAPI?要支持IE9还是什么?我还需要使用Postman API测试。在Postman中,它只支持CryptoJS。更确切地说,AES有几种变体,结果不仅取决于变体和密钥,还取决于初始化向量。如果这些参数中的任何一个不同,您将获得不同的cyphertext。@Touffy您可以使用cryptojs编写javascript,以获得与此网站相同的结果吗