secret.js 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. //引入crypto-js
  2. //const CryptoJS = require('crypto-js');
  3. import CryptoJS from '@/utils/crypto-js.js';
  4. //十六位十六进制数作为密钥(秘钥为随机生成,必须与后端保持一致!)
  5. const key = CryptoJS.enc.Utf8.parse("J4ny0Ja678Y7P2so");
  6. //十六位十六进制数作为密钥偏移量(秘钥为随机生成,必须与后端保持一致!)
  7. const iv = CryptoJS.enc.Utf8.parse('pTNorfvZW2UZJbd0');
  8. //解密方法
  9. function Decrypt(word) {
  10. // 先将 Base64 还原一下, 因为加密的时候做了一些字符的替换
  11. const restoreBase64 = word.replace(/\-/g,'+').replace(/_/g,'/');
  12. // 这里 mode, padding, iv 一定要跟加密的时候完全一样
  13. // 返回的是一个解密后的对象
  14. let decrypt = CryptoJS.AES.decrypt(restoreBase64, key, {
  15. iv: iv,
  16. mode: CryptoJS.mode.CBC,
  17. padding: CryptoJS.pad.Pkcs7
  18. });
  19. // 将解密对象转换成 UTF8 的字符串
  20. let decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
  21. // 返回解密结果
  22. return decryptedStr.toString();
  23. }
  24. //加密方法
  25. function Encrypt(word) {
  26. let srcs = CryptoJS.enc.Utf8.parse(word);
  27. /**
  28. * CipherOption, 加密的一些选项:
  29. * mode: 加密模式, 可取值(CBC, CFB, CTR, CTRGladman, OFB, ECB), 都在 CryptoJS.mode 对象下
  30. * padding: 填充方式, 可取值(Pkcs7, AnsiX923, Iso10126, Iso97971, ZeroPadding, NoPadding), 都在 CryptoJS.pad 对象下
  31. * iv: 偏移量, mode === ECB 时, 不需要 iv
  32. * 返回的是一个加密对象
  33. */
  34. let encrypted = CryptoJS.AES.encrypt(srcs, key,
  35. {
  36. iv: iv,
  37. mode: CryptoJS.mode.CBC,
  38. padding: CryptoJS.pad.Pkcs7
  39. });
  40. //将结果进行base64加密
  41. return encrypted.ciphertext.toString(CryptoJS.enc.Base64);
  42. }
  43. export {Decrypt , Encrypt}