CryptoJS 使用指南

CryptoJS 是一个开源的JavaScript标准密码学库。

Node.js(install)

依赖:

  • Node.js
  • npm

安装命令:

1
npm install crypto-js

使用示例

ES6 中使用

1
2
3
4
5
6
7
import sha256 from 'crypto-js/sha256';
import hmacSHA512 from 'crypto-js/hmac-sha512';
import Base64 from 'crypto-js/enc-base64';

const message, nonce, path, privateKey; // ...
const hashDigest = sha256(nonce + message);
const hmacDigest = Base64.stringify(hmacSHA512(path + hashDigest, privateKey));

在模块系统中使用

1
2
3
4
var AES = require("crypto-js/aes");
var SHA256 = require("crypto-js/sha256");
...
console.log(SHA256("Message"));

导入所有的模块

1
2
var CryptoJS = require("crypto-js");
console.log(CryptoJS.HmacSHA1("Message", "Key"));

在浏览器中使用

1
2
3
4
5
<script type="text/javascript" src="path-to/bower_components/crypto-js/crypto-js.js"></script>
<script type="text/javascript">
var encrypted = CryptoJS.AES(...);
var encrypted = CryptoJS.SHA256(...);
</script>

API

文本加解密

1
2
3
4
5
6
7
8
9
10
var CryptoJS = require("crypto-js");

// Encrypt
var ciphertext = CryptoJS.AES.encrypt('my message', 'secret key 123');

// Decrypt
var bytes = CryptoJS.AES.decrypt(ciphertext.toString(), 'secret key 123');
var plaintext = bytes.toString(CryptoJS.enc.Utf8);

console.log(plaintext);

对象类型加解密

1
2
3
4
5
6
7
8
9
10
11
12
var CryptoJS = require("crypto-js");

var data = [{id: 1}, {id: 2}]

// Encrypt
var ciphertext = CryptoJS.AES.encrypt(JSON.stringify(data), 'secret key 123');

// Decrypt
var bytes = CryptoJS.AES.decrypt(ciphertext.toString(), 'secret key 123');
var decryptedData = JSON.parse(bytes.toString(CryptoJS.enc.Utf8));

console.log(decryptedData);

库命名空间

Base

原型继承的基础对象。CryptoJS库中,自己实现了一套继承机制。

1
CryptoJS.lib.Base

WordArray

一个32位字的数组。继承Base

1
CryptoJS.lib.WordArray

转换为字符串:

1
2
3
var string = wordArray + '';
var string = wordArray.toString();
var string = wordArray.toString(CryptoJS.enc.Utf8);

toString()方法有一个encoder参数,默认为CryptoJS.enc.Hex

BufferedBlockAlgorithm

缓冲块算法抽象模板。继承Base

1
CryptoJS.lib.BufferedBlockAlgorithm

Hasher

hash算法抽象模板。继承BufferedBlockAlgorithm

1
CryptoJS.lib.Hasher

编码器

Hex

提供16进制编解码支持。

1
CryptoJS.enc.Hex

Latin1

ISO 8859-1,正式编号为ISO/IEC 8859-1:1998,又称Latin-1“西欧语言”,是国际标准化组织内ISO/IEC 8859的第一个8位字符集。它以ASCII为基础,在空置的0xA0-0xFF的范围内,加入96个字母及符号,藉以供使用附加符号的拉丁字母语言使用。详细介绍

1
CryptoJS.enc.Hex

Utf8

提供UTF-8编解码支持。

1
CryptoJS.enc.Utf8

模块列表

核心模块

  • crypto-js/core
  • crypto-js/x64-core
  • crypto-js/lib-typedarrays

哈希算法模块

  • crypto-js/md5
  • crypto-js/sha1
  • crypto-js/sha256
  • crypto-js/sha224
  • crypto-js/sha512
  • crypto-js/sha384
  • crypto-js/sha3
  • crypto-js/ripemd160

HMAC算法模块

  • crypto-js/hmac-md5
  • crypto-js/hmac-sha1
  • crypto-js/hmac-sha256
  • crypto-js/hmac-sha224
  • crypto-js/hmac-sha512
  • crypto-js/hmac-sha384
  • crypto-js/hmac-sha3
  • crypto-js/hmac-ripemd160

PBKDF2算法

  • crypto-js/pbkdf2

加解密模块

  • crypto-js/aes
  • crypto-js/tripledes
  • crypto-js/rc4
  • crypto-js/rabbit
  • crypto-js/rabbit-legacy
  • crypto-js/evpkdf

格式化模块

  • crypto-js/format-openssl
  • crypto-js/format-hex

编解码模块

  • crypto-js/enc-latin1
  • crypto-js/enc-utf8
  • crypto-js/enc-hex
  • crypto-js/enc-utf16
  • crypto-js/enc-base64

工作模式模块

  • crypto-js/mode-cfb
  • crypto-js/mode-ctr
  • crypto-js/mode-ctr-gladman
  • crypto-js/mode-ofb
  • crypto-js/mode-ecb

填充方式模块

  • crypto-js/pad-pkcs7
  • crypto-js/pad-ansix923
  • crypto-js/pad-iso10126
  • crypto-js/pad-iso97971
  • crypto-js/pad-zeropadding
  • crypto-js/pad-nopadding
CryptoJS AES BASE64 MD5 SHA