当前位置:   article > 正文

crypto-js 加密、解密使用方法,复制就能用_cryptojs

cryptojs

一、安装crypto-js

npm install crypto-js

二、封装加密方法

单独在js中封装一个js存放这个方法,后期使用再引入

  1. import CryptoJS from 'crypto-js';
  2. let aesKeyInfo = {
  3. key: '0123456789abcdef',
  4. iv: 'abcdef0123456789', // 密钥偏移量,16个字符
  5. };
  6. let desKeyInfo = {
  7. key: '0123456789abcdef',
  8. iv: 'abcdef0123456789', // 密钥偏移量,16个字符
  9. };
  10. let defaultAesMode = CryptoJS.mode.CBC;
  11. let defaultAesPadding = CryptoJS.pad.Pkcs7;
  12. let defaultDesMode = CryptoJS.mode.CBC;
  13. let defaultDesPadding = CryptoJS.pad.Pkcs7;
  14. /** 设置aes默认的密钥和偏移量 */
  15. export function setDefaultAesKeyInfo(keyInfo) {
  16. aesKeyInfo = keyInfo;
  17. }
  18. /** 设置默认的密钥和偏移量 */
  19. export function setDefaultDesKeyInfo(keyInfo) {
  20. desKeyInfo = keyInfo;
  21. }
  22. /** 设置默认aes加密模式 */
  23. export function setDefaultAesMode(mode) {
  24. defaultAesMode = mode;
  25. }
  26. /** 设置默认aes padding模式 */
  27. export function setDefaultAesPadding(padding) {
  28. defaultAesPadding = padding;
  29. }
  30. /** 设置默认des加密模式 */
  31. export function setDefaultDesMode(mode) {
  32. defaultDesMode = mode;
  33. }
  34. /** 设置默认des padding模式 */
  35. export function setDefaultDesPadding(padding) {
  36. defaultDesPadding = padding;
  37. }
  38. /**
  39. * 加密aes字符串
  40. */
  41. function encodeAesString(data, { key = aesKeyInfo.key, iv = aesKeyInfo.iv, mode = defaultAesMode, padding = defaultAesPadding, } = {
  42. key: aesKeyInfo.key,
  43. iv: aesKeyInfo.iv,
  44. mode: defaultAesMode,
  45. padding: defaultAesPadding,
  46. }) {
  47. const encrypted = CryptoJS.AES.encrypt(data, CryptoJS.enc.Utf8.parse(key), {
  48. iv: CryptoJS.enc.Utf8.parse(iv),
  49. mode,
  50. padding,
  51. });
  52. return encrypted.toString(); // 返回的是base64格式的密文
  53. }
  54. /**
  55. * 解密aes字符串
  56. */
  57. function decodeAesString(encrypted, { key = aesKeyInfo.key, iv = aesKeyInfo.iv, mode = defaultAesMode, padding = defaultAesPadding, } = {
  58. key: aesKeyInfo.key,
  59. iv: aesKeyInfo.iv,
  60. mode: defaultAesMode,
  61. padding: defaultAesPadding,
  62. }) {
  63. const decrypted = CryptoJS.AES.decrypt(encrypted, CryptoJS.enc.Utf8.parse(key), {
  64. iv: CryptoJS.enc.Utf8.parse(iv),
  65. mode,
  66. padding,
  67. });
  68. return decrypted.toString(CryptoJS.enc.Utf8); // 返回解密后的原文
  69. }
  70. /** AES对称加密解密 */
  71. const aes = {
  72. en: encodeAesString,
  73. de: decodeAesString,
  74. };
  75. /** 加密des字符串 */
  76. const encodeDesString = function (data, { key = desKeyInfo.key, iv = desKeyInfo.iv, mode = defaultDesMode, padding = defaultDesPadding, } = {
  77. key: desKeyInfo.key,
  78. iv: desKeyInfo.iv,
  79. mode: defaultDesMode,
  80. padding: defaultDesPadding,
  81. }) {
  82. var encrypted = CryptoJS.DES.encrypt(data, CryptoJS.enc.Utf8.parse(key), {
  83. iv: CryptoJS.enc.Utf8.parse(iv),
  84. mode,
  85. padding,
  86. });
  87. return encrypted.toString();
  88. };
  89. /**
  90. * 解密des字符串
  91. */
  92. function decodeDesString(data, { key = desKeyInfo.key, iv = desKeyInfo.iv, mode = defaultDesMode, padding = defaultDesPadding, } = {
  93. key: desKeyInfo.key,
  94. iv: desKeyInfo.iv,
  95. mode: defaultDesMode,
  96. padding: defaultDesPadding,
  97. }) {
  98. const decrypted = CryptoJS.DES.decrypt(data, CryptoJS.enc.Utf8.parse(key), {
  99. iv: CryptoJS.enc.Utf8.parse(iv),
  100. mode,
  101. padding,
  102. });
  103. return decrypted.toString(CryptoJS.enc.Utf8); // 返回解密后的原文
  104. }
  105. /** Des对称加密解密 */
  106. const des = {
  107. en: encodeDesString,
  108. de: decodeDesString,
  109. };
  110. /** BASE64转码 */
  111. const base64 = {
  112. en: (data) => CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(data)),
  113. de: (data) => CryptoJS.enc.Base64.parse(data).toString(CryptoJS.enc.Utf8),
  114. };
  115. /** SHA256摘要 */
  116. const sha256 = (data) => {
  117. return CryptoJS.SHA256(data).toString();
  118. };
  119. /** md5摘要 */
  120. const md5 = (data) => {
  121. return CryptoJS.MD5(data).toString();
  122. };
  123. // 导出可用方法
  124. export { aes, des, md5, sha256, base64, decodeAesString, encodeAesString, decodeDesString, encodeDesString }

三、使用方法

1、 写入vue项目根目录下的main.js中,实现全局注册使用

  1. import Vue from "vue";
  2. import App from "./App.vue";
  3. // 引入暴露出的加密解密方法这里以DES为例
  4. import {
  5. setDefaultDesKeyInfo,
  6. encodeDesString,
  7. decodeDesString,
  8. } from "@/utils/index";
  9. // 设置和后端对应的key和偏移量
  10. setDefaultDesKeyInfo({ key: "写入密钥", iv: "写入偏移量" });
  11. // 将解密和解密方法挂在vue原型上
  12. Vue.prototype.$jiami = encodeDesString;
  13. Vue.prototype.$jiemi = decodeDesString;

2、调用方法

  1. <template>
  2. <div id="app">
  3. <h1>测试解密</h1>
  4. <p>加密前:我是无敌大帅哥</p>
  5. <button @click="md5">加密</button>
  6. <p v-if="text">加密后:{{ text }}</p>
  7. </div>
  8. </template>
  9. <script>
  10. export default {
  11. name: "App",
  12. data() {
  13. return {
  14. text: null, //解密后
  15. };
  16. },
  17. methods: {
  18. md5() {
  19. // 启动加密
  20. this.text = this.$jiami("我是无敌大帅哥");
  21. },
  22. },
  23. created() {
  24. // 启动解密
  25. console.log(this.$jiemi("放入后端给你的加密后的字符串测试"));
  26. },
  27. };
  28. </script>
  29. <style></style>

根据和后端商议的算法来决定你要使用的方法,个人觉得目前用的比较多是AES和DES

本篇文章比较注重实操,如果帮到了你,请你帮我点赞,原创不易。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/873049
推荐阅读
相关标签
  

闽ICP备14008679号