如何使用crypto-js加密/解密

时间:2018-04-01 20:20:39

标签: javascript reactjs encryption cryptojs

我使用的是crypto-js库:

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

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

但它返回错误的输出。

我的代码:

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));
}

但我的控制台没有返回my message。它会像这样返回:

6d79206d657373616765

4 个答案:

答案 0 :(得分:2)

我从未使用过这个库,但是一个小的检查显示你的结果是输入的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

答案 1 :(得分:0)

目前您正在获取六角形字符串6d79206d657373616765,因为当您输入my message时,您可以查看this convertor它会返回6d79206d657373616765

crypto-js Documentation

中使用

您需要在.toString()方法中使用decrypt,因为目前您正在为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));
}

答案 2 :(得分:0)

您可以使用它。 cippertext使用输出算法。

ciphertext.toString("base64")

ciphertext.toString("hex")

答案 3 :(得分:0)

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));

enter image description here