crypto-js 是一个纯 javascript 写的加密算法类库 ,可以非常方便地在 javascript 进行 MD5、SHA1、SHA2、SHA3、RIPEMD-160 哈希散列,进行 AES、DES、Rabbit、RC4、Triple DES 加解密。
github:https://github.com/brix/crypto-js

示例

定义 encrypt

下面的代码的 KP 中 key 是密钥 ,iv 是密钥偏移量,这个一般是接口返回的,或者前后端协定一致。

  1. //encrypt.js
  2. /**
  3. * 通过crypto-js实现 加解密工具
  4. * AES
  5. * @author: wfk
  6. */
  7. import CryptoJS from 'crypto-js'
  8. const KP = {
  9. key: '32824659', // 秘钥 16*n:
  10. iv: '1234567812345678' // 偏移量
  11. };
  12. function getAesString(data, key, iv) { // 加密
  13. key = CryptoJS.enc.Utf8.parse(key);
  14. iv = CryptoJS.enc.Utf8.parse(iv);
  15. let encrypted = CryptoJS.DES.encrypt(data, key,
  16. {
  17. // iv,
  18. mode: CryptoJS.mode.ECB,
  19. padding: CryptoJS.pad.Pkcs7
  20. });
  21. return encrypted.toString(); // 返回的是base64格式的密文
  22. }
  23. function getDAesString(encrypted, key, iv) { // 解密
  24. key = CryptoJS.enc.Utf8.parse(key);
  25. iv = CryptoJS.enc.Utf8.parse(iv);
  26. let decrypted = CryptoJS.DES.decrypt(encrypted, key,
  27. {
  28. // iv,
  29. mode: CryptoJS.mode.ECB,
  30. padding: CryptoJS.pad.Pkcs7
  31. });
  32. return decrypted.toString(CryptoJS.enc.Utf8); //
  33. }
  34. // AES 对称秘钥加密
  35. const aes = {
  36. en: (data) => getAesString(data, KP.key, KP.iv),
  37. de: (data) => getDAesString(data, KP.key, KP.iv)
  38. };
  39. // BASE64
  40. const base64 = {
  41. en: (data) => CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(data)),
  42. de: (data) => CryptoJS.enc.Base64.parse(data).toString(CryptoJS.enc.Utf8)
  43. };
  44. // SHA256
  45. const sha256 = (data) => {
  46. return CryptoJS.SHA256(data).toString();
  47. };
  48. // MD5
  49. const md5 = (data) => {
  50. return CryptoJS.MD5(data).toString();
  51. };
  52. export {
  53. aes,
  54. md5,
  55. sha256,
  56. base64
  57. };

使用

  1. import { aes } from '@/util/encrypt.js';
  2. ****
  3. let password = aes.en('12345678'); //3iy6ZPcjJQzOBGxvlgwRDg==

按需使用

import AES from 'crypto-js/aes';

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
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
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 - 简书
强大的前端加密/解密js库crypto-js使用解析_蓝戒的博客