尝试使用 CryptoJS 打印十六进制字符串
Trying to print hex string with CryptoJS
我正在尝试使用 CryptoJS 来加密一些内容,然后生成加密文本的十六进制字符串。
function EncryptAES(text, key) {
var encrypted = CryptoJS.AES.encrypt(text, key);
return CryptoJS.enc.Hex.stringify(encrypted);
}
var encrypted = EncryptAES("Hello, World!", "SuperSecretPassword");
console.log(encrypted);
但是,控制台上打印的不是十六进制字符串,而是空行。我做错了什么?
CryptoJS.AES.encrypt()
returns 封装多个数据的 CipherParams
对象,包括作为 WordArray
的密文(s. here)。默认情况下,.toString()
returns WordArray
:
的十六进制编码数据
function EncryptAES(text, key) {
var encrypted = CryptoJS.AES.encrypt(text, key);
return encrypted.ciphertext.toString()
}
var encrypted = EncryptAES("Hello, World!", "SuperSecretPassword");
console.log(encrypted);
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/crypto-js.min.js"></script>
请注意,在您的示例中,密钥 material 作为字符串传递,因此被解释为密码短语 (s. here),通过密钥派生函数结合 random 8 bytes salt,这就是为什么对于相同的输入数据每次密文都会变化的原因。
因此,解密不仅需要密文,还需要盐,盐也封装在CipherParams
对象中。
对于 CipherParams
对象,.toString()
returns Base64 编码的 OpenSSL 格式的数据由 Salted__
的 ASCII 编码组成,后跟 8 字节盐和实际密文,以及因此包含解密所需的所有信息。
我正在尝试使用 CryptoJS 来加密一些内容,然后生成加密文本的十六进制字符串。
function EncryptAES(text, key) {
var encrypted = CryptoJS.AES.encrypt(text, key);
return CryptoJS.enc.Hex.stringify(encrypted);
}
var encrypted = EncryptAES("Hello, World!", "SuperSecretPassword");
console.log(encrypted);
但是,控制台上打印的不是十六进制字符串,而是空行。我做错了什么?
CryptoJS.AES.encrypt()
returns 封装多个数据的 CipherParams
对象,包括作为 WordArray
的密文(s. here)。默认情况下,.toString()
returns WordArray
:
function EncryptAES(text, key) {
var encrypted = CryptoJS.AES.encrypt(text, key);
return encrypted.ciphertext.toString()
}
var encrypted = EncryptAES("Hello, World!", "SuperSecretPassword");
console.log(encrypted);
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/crypto-js.min.js"></script>
请注意,在您的示例中,密钥 material 作为字符串传递,因此被解释为密码短语 (s. here),通过密钥派生函数结合 random 8 bytes salt,这就是为什么对于相同的输入数据每次密文都会变化的原因。
因此,解密不仅需要密文,还需要盐,盐也封装在CipherParams
对象中。
对于 CipherParams
对象,.toString()
returns Base64 编码的 OpenSSL 格式的数据由 Salted__
的 ASCII 编码组成,后跟 8 字节盐和实际密文,以及因此包含解密所需的所有信息。