如何使用 crypto-js encrypt/decrypt

how to encrypt/decrypt with crypto-js

我正在使用 crypto-js 库:

https://github.com/brix/crypto-js

我想加密一些值并解密它们。

但它 return 输出错误。

我的代码:

import CryptoAES from 'crypto-js/aes'

componentDidMount(){
  var ciphertext = CryptoAES.encrypt('my message', 'secret key 123');
  var _ciphertext = CryptoAES.decrypt(ciphertext, 'secret key 123');
  console.log(_ciphertext.toString(CryptoAES.Utf8));
}

但我的控制台没有 return my message。它 return 是这样的:

6d79206d657373616765

我从未使用过这个库,但一个小的检查显示你的结果是你输入的 ASCII 代码作为十六进制字符串。

0x6d=m
...
0x65=e

6d|79|20|6d|65|73|73|61|67|65
m |y |  |m |e |s |s |a |g |e

所以这段代码工作正常。可能 _ciphertext.toString() 把一切都搞砸了。您需要检查如何正确使用 _ciphertext

目前您得到的是六进制字符串 6d79206d657373616765,因为您可以在输入 my message 时检查 this convertor,它将 return 您 6d79206d657373616765

如在crypto-js Documentation中使用

您需要在 decrypt 方法中使用 .toString(),因为目前您正在为 my message 获取十六进制,您需要将其转换回 string ,所以你需要改变这个:

var _ciphertext = CryptoAES.decrypt(ciphertext, 'secret key 123');

var _ciphertext = CryptoAES.decrypt(ciphertext.toString(), 'secret key 123');

它将像:

import CryptoAES from 'crypto-js/aes'

componentDidMount(){
  var ciphertext = CryptoAES.encrypt('my message', 'secret key 123');
  var _ciphertext = CryptoAES.decrypt(ciphertext.toString(), 'secret key 123');
  console.log(_ciphertext.toString(CryptoAES.Utf8));
}

你可以用这个。 cippertext 使用输出算法。

ciphertext.toString("base64")

ciphertext.toString("hex")
import CryptoAES from 'crypto-js/aes';
import CryptoENC from 'crypto-js/enc-utf8';

var ciphertext = CryptoAES.encrypt('my message', 'secret key 123');
var _ciphertext = CryptoAES.decrypt(ciphertext.toString(), 'secret key 123');
console.log(_ciphertext.toString(CryptoENC));