• VUE3、uni-app、SpringBoot登录密码加密


    vue安装crypto-js

    1. npm install crypto-js
    2. yarn add crypto-js

    前端封装加解密

    aes.js

    1. import CryptoJS from 'crypto-js'
    2. var key = CryptoJS.enc.Utf8.parse("0102030405060708");
    3. var iv = CryptoJS.enc.Utf8.parse('abcdefghijklmn');
    4. //解密方法
    5. export function Decrypt(word) {
    6. var encryptedHexStr = CryptoJS.enc.Hex.parse(word);
    7. var srcs = CryptoJS.enc.Base64.stringify(encryptedHexStr);
    8. var decrypt = CryptoJS.AES.decrypt(srcs, key, {
    9. iv: iv,
    10. mode: CryptoJS.mode.CBC,
    11. padding: CryptoJS.pad.Pkcs7
    12. });
    13. var decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
    14. return decryptedStr.toString();
    15. }
    16. //加密方法
    17. export function Encrypt(word) {
    18. var srcs = CryptoJS.enc.Utf8.parse(word);
    19. var encrypted = CryptoJS.AES.encrypt(srcs, key, {
    20. iv: iv,
    21. mode: CryptoJS.mode.CBC,
    22. padding: CryptoJS.pad.Pkcs7
    23. });
    24. return encrypted.ciphertext.toString().toUpperCase();
    25. }

    登录加密

    import {Encrypt} from '@/utils/aes.js';

    loginForm.value.password = Encrypt(password.value);

    后端解密

    1. import org.bouncycastle.jce.provider.BouncyCastleProvider;
    2. import org.bouncycastle.util.encoders.Hex;
    3. import javax.crypto.Cipher;
    4. import javax.crypto.NoSuchPaddingException;
    5. import javax.crypto.spec.IvParameterSpec;
    6. import javax.crypto.spec.SecretKeySpec;
    7. import java.security.Key;
    8. import java.security.NoSuchAlgorithmException;
    9. import java.security.NoSuchProviderException;
    10. import java.security.Security;
    11. public class Aes {
    12. /**
    13. * @author ngh
    14. * AES128 算法
    15. *

    16. * CBC 模式
    17. *

    18. * PKCS7Padding 填充模式
    19. *

    20. * CBC模式需要添加偏移量参数iv,必须16位
    21. * 密钥 sessionKey,必须16位
    22. *

    23. * 介于java 不支持PKCS7Padding,只支持PKCS5Padding 但是PKCS7Padding 和 PKCS5Padding 没有什么区别
    24. * 要实现在java端用PKCS7Padding填充,需要用到bouncycastle组件来实现
    25. */
    26. private final String sessionKey = "0102030405060708";
    27. // 偏移量 16位
    28. private final String iv = "abcdefghijklmn";
    29. // 算法名称
    30. final String KEY_ALGORITHM = "AES";
    31. // 加解密算法/模式/填充方式
    32. final String algorithmStr = "AES/CBC/PKCS7Padding";
    33. // 加解密 密钥 16位
    34. byte[] ivByte;
    35. byte[] keybytes;
    36. private Key key;
    37. private Cipher cipher;
    38. boolean isInited = false;
    39. public void init() {
    40. // 如果密钥不足16位,那么就补足. 这个if 中的内容很重要
    41. keybytes = sessionKey.getBytes();
    42. ivByte = iv.getBytes();
    43. // int base = 16;
    44. // if (keybytes.length % base != 0) {
    45. // int groups = keybytes.length / base + (keybytes.length % base != 0 ? 1 : 0);
    46. // byte[] temp = new byte[groups * base];
    47. // Arrays.fill(temp, (byte) 0);
    48. // System.arraycopy(keybytes, 0, temp, 0, keybytes.length);
    49. // keybytes = temp;
    50. // }
    51. // 初始化
    52. Security.addProvider(new BouncyCastleProvider());
    53. // 转化成JAVA的密钥格式
    54. key = new SecretKeySpec(keybytes, KEY_ALGORITHM);
    55. try {
    56. // 初始化cipher
    57. cipher = Cipher.getInstance(algorithmStr, "BC");
    58. } catch (NoSuchAlgorithmException e) {
    59. e.printStackTrace();
    60. } catch (NoSuchPaddingException e) {
    61. e.printStackTrace();
    62. } catch (NoSuchProviderException e) {
    63. e.printStackTrace();
    64. }
    65. }
    66. /**
    67. * 加密方法
    68. *
    69. * @param content 要加密的字符串
    70. * @return
    71. */
    72. public String encrypt(String content) {
    73. byte[] encryptedText = null;
    74. byte[] contentByte = content.getBytes();
    75. init();
    76. try {
    77. cipher.init(Cipher.ENCRYPT_MODE, key, new IvParameterSpec(ivByte));
    78. encryptedText = cipher.doFinal(contentByte);
    79. } catch (Exception e) {
    80. e.printStackTrace();
    81. }
    82. return new String(Hex.encode(encryptedText));
    83. }
    84. /**
    85. * 解密方法
    86. *
    87. * @param encryptedData 要解密的字符串
    88. * @return
    89. */
    90. public String decrypt(String encryptedData) {
    91. byte[] encryptedText = null;
    92. byte[] encryptedDataByte = Hex.decode(encryptedData);
    93. init();
    94. try {
    95. cipher.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(ivByte));
    96. encryptedText = cipher.doFinal(encryptedDataByte);
    97. } catch (Exception e) {
    98. e.printStackTrace();
    99. }
    100. return new String(encryptedText);
    101. }
    102. public static void main(String[] args) {
    103. Aes aes = new Aes();
    104. // 加密字符串
    105. String content = "孟飞快跑";
    106. System.out.println("加密前的:" + content);
    107. // System.out.println("加密密钥:" + new String(keybytes));
    108. // 加密方法
    109. String enc = aes.encrypt(content);
    110. System.out.println("加密后的内容:" + enc);
    111. // 解密方法
    112. String dec = aes.decrypt("D9EBE877FFAB3C39C0AB8CDD5CE7B64A");
    113. System.out.println("解密后的内容:" + dec);
    114. }
    115. }

    new Aes().decrypt(loginBody.getPassword())

    App加密

    CryptoJS.js

    1. /**
    2. * [description] CryptoJS v3.1.2
    3. * [description] zhuangzhudada sort out
    4. */
    5. var CryptoJS = CryptoJS || function(u, p) {
    6. var d = {},
    7. l = d.lib = {},
    8. s = function() {},
    9. t = l.Base = {
    10. extend: function(a) {
    11. s.prototype = this;
    12. var c = new s;
    13. a && c.mixIn(a);
    14. c.hasOwnProperty("init") || (c.init = function() {
    15. c.$super.init.apply(this, arguments)
    16. });
    17. c.init.prototype = c;
    18. c.$super = this;
    19. return c
    20. },
    21. create: function() {
    22. var a = this.extend();
    23. a.init.apply(a, arguments);
    24. return a
    25. },
    26. init: function() {},
    27. mixIn: function(a) {
    28. for (var c in a) a.hasOwnProperty(c) && (this[c] = a[c]);
    29. a.hasOwnProperty("toString") && (this.toString = a.toString)
    30. },
    31. clone: function() {
    32. return this.init.prototype.extend(this)
    33. }
    34. },
    35. r = l.WordArray = t.extend({
    36. init: function(a, c) {
    37. a = this.words = a || [];
    38. this.sigBytes = c != p ? c : 4 * a.length
    39. },
    40. toString: function(a) {
    41. return (a || v).stringify(this)
    42. },
    43. concat: function(a) {
    44. var c = this.words,
    45. e = a.words,
    46. j = this.sigBytes;
    47. a = a.sigBytes;
    48. this.clamp();
    49. if (j % 4)
    50. for (var k = 0; k < a; k++) c[j + k >>> 2] |= (e[k >>> 2] >>> 24 - 8 * (k % 4) & 255) << 24 - 8 * ((j + k) % 4);
    51. else if (65535 < e.length)
    52. for (k = 0; k < a; k += 4) c[j + k >>> 2] = e[k >>> 2];
    53. else c.push.apply(c, e);
    54. this.sigBytes += a;
    55. return this
    56. },
    57. clamp: function() {
    58. var a = this.words,
    59. c = this.sigBytes;
    60. a[c >>> 2] &= 4294967295 <<
    61. 32 - 8 * (c % 4);
    62. a.length = u.ceil(c / 4)
    63. },
    64. clone: function() {
    65. var a = t.clone.call(this);
    66. a.words = this.words.slice(0);
    67. return a
    68. },
    69. random: function(a) {
    70. for (var c = [], e = 0; e < a; e += 4) c.push(4294967296 * u.random() | 0);
    71. return new r.init(c, a)
    72. }
    73. }),
    74. w = d.enc = {},
    75. v = w.Hex = {
    76. stringify: function(a) {
    77. var c = a.words;
    78. a = a.sigBytes;
    79. for (var e = [], j = 0; j < a; j++) {
    80. var k = c[j >>> 2] >>> 24 - 8 * (j % 4) & 255;
    81. e.push((k >>> 4).toString(16));
    82. e.push((k & 15).toString(16))
    83. }
    84. return e.join("")
    85. },
    86. parse: function(a) {
    87. for (var c = a.length, e = [], j = 0; j < c; j += 2) e[j >>> 3] |= parseInt(a.substr(j,
    88. 2), 16) << 24 - 4 * (j % 8);
    89. return new r.init(e, c / 2)
    90. }
    91. },
    92. b = w.Latin1 = {
    93. stringify: function(a) {
    94. var c = a.words;
    95. a = a.sigBytes;
    96. for (var e = [], j = 0; j < a; j++) e.push(String.fromCharCode(c[j >>> 2] >>> 24 - 8 * (j % 4) & 255));
    97. return e.join("")
    98. },
    99. parse: function(a) {
    100. for (var c = a.length, e = [], j = 0; j < c; j++) e[j >>> 2] |= (a.charCodeAt(j) & 255) << 24 - 8 * (j % 4);
    101. return new r.init(e, c)
    102. }
    103. },
    104. x = w.Utf8 = {
    105. stringify: function(a) {
    106. try {
    107. return decodeURIComponent(escape(b.stringify(a)))
    108. } catch (c) {
    109. throw Error("Malformed UTF-8 data");
    110. }
    111. },
    112. parse: function(a) {
    113. return b.parse(unescape(encodeURIComponent(a)))
    114. }
    115. },
    116. q = l.BufferedBlockAlgorithm = t.extend({
    117. reset: function() {
    118. this._data = new r.init;
    119. this._nDataBytes = 0
    120. },
    121. _append: function(a) {
    122. "string" == typeof a && (a = x.parse(a));
    123. this._data.concat(a);
    124. this._nDataBytes += a.sigBytes
    125. },
    126. _process: function(a) {
    127. var c = this._data,
    128. e = c.words,
    129. j = c.sigBytes,
    130. k = this.blockSize,
    131. b = j / (4 * k),
    132. b = a ? u.ceil(b) : u.max((b | 0) - this._minBufferSize, 0);
    133. a = b * k;
    134. j = u.min(4 * a, j);
    135. if (a) {
    136. for (var q = 0; q < a; q += k) this._doProcessBlock(e, q);
    137. q = e.splice(0, a);
    138. c.sigBytes -= j
    139. }
    140. return new r.init(q, j)
    141. },
    142. clone: function() {
    143. var a = t.clone.call(this);
    144. a._data = this._data.clone();
    145. return a
    146. },
    147. _minBufferSize: 0
    148. });
    149. l.Hasher = q.extend({
    150. cfg: t.extend(),
    151. init: function(a) {
    152. this.cfg = this.cfg.extend(a);
    153. this.reset()
    154. },
    155. reset: function() {
    156. q.reset.call(this);
    157. this._doReset()
    158. },
    159. update: function(a) {
    160. this._append(a);
    161. this._process();
    162. return this
    163. },
    164. finalize: function(a) {
    165. a && this._append(a);
    166. return this._doFinalize()
    167. },
    168. blockSize: 16,
    169. _createHelper: function(a) {
    170. return function(b, e) {
    171. return (new a.init(e)).finalize(b)
    172. }
    173. },
    174. _createHmacHelper: function(a) {
    175. return function(b, e) {
    176. return (new n.HMAC.init(a,
    177. e)).finalize(b)
    178. }
    179. }
    180. });
    181. var n = d.algo = {};
    182. return d
    183. }(Math);
    184. (function() {
    185. var u = CryptoJS,
    186. p = u.lib.WordArray;
    187. u.enc.Base64 = {
    188. stringify: function(d) {
    189. var l = d.words,
    190. p = d.sigBytes,
    191. t = this._map;
    192. d.clamp();
    193. d = [];
    194. for (var r = 0; r < p; r += 3)
    195. for (var w = (l[r >>> 2] >>> 24 - 8 * (r % 4) & 255) << 16 | (l[r + 1 >>> 2] >>> 24 - 8 * ((r + 1) % 4) & 255) << 8 | l[r + 2 >>> 2] >>> 24 - 8 * ((r + 2) % 4) & 255, v = 0; 4 > v && r + 0.75 * v < p; v++) d.push(t.charAt(w >>> 6 * (3 - v) & 63));
    196. if (l = t.charAt(64))
    197. for (; d.length % 4;) d.push(l);
    198. return d.join("")
    199. },
    200. parse: function(d) {
    201. var l = d.length,
    202. s = this._map,
    203. t = s.charAt(64);
    204. t && (t = d.indexOf(t), -1 != t && (l = t));
    205. for (var t = [], r = 0, w = 0; w <
    206. l; w++)
    207. if (w % 4) {
    208. var v = s.indexOf(d.charAt(w - 1)) << 2 * (w % 4),
    209. b = s.indexOf(d.charAt(w)) >>> 6 - 2 * (w % 4);
    210. t[r >>> 2] |= (v | b) << 24 - 8 * (r % 4);
    211. r++
    212. }
    213. return p.create(t, r)
    214. },
    215. _map: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="
    216. }
    217. })();
    218. (function(u) {
    219. function p(b, n, a, c, e, j, k) {
    220. b = b + (n & a | ~n & c) + e + k;
    221. return (b << j | b >>> 32 - j) + n
    222. }
    223. function d(b, n, a, c, e, j, k) {
    224. b = b + (n & c | a & ~c) + e + k;
    225. return (b << j | b >>> 32 - j) + n
    226. }
    227. function l(b, n, a, c, e, j, k) {
    228. b = b + (n ^ a ^ c) + e + k;
    229. return (b << j | b >>> 32 - j) + n
    230. }
    231. function s(b, n, a, c, e, j, k) {
    232. b = b + (a ^ (n | ~c)) + e + k;
    233. return (b << j | b >>> 32 - j) + n
    234. }
    235. for (var t = CryptoJS, r = t.lib, w = r.WordArray, v = r.Hasher, r = t.algo, b = [], x = 0; 64 > x; x++) b[x] = 4294967296 * u.abs(u.sin(x + 1)) | 0;
    236. r = r.MD5 = v.extend({
    237. _doReset: function() {
    238. this._hash = new w.init([1732584193, 4023233417, 2562383102, 271733878])
    239. },
    240. _doProcessBlock: function(q, n) {
    241. for (var a = 0; 16 > a; a++) {
    242. var c = n + a,
    243. e = q[c];
    244. q[c] = (e << 8 | e >>> 24) & 16711935 | (e << 24 | e >>> 8) & 4278255360
    245. }
    246. var a = this._hash.words,
    247. c = q[n + 0],
    248. e = q[n + 1],
    249. j = q[n + 2],
    250. k = q[n + 3],
    251. z = q[n + 4],
    252. r = q[n + 5],
    253. t = q[n + 6],
    254. w = q[n + 7],
    255. v = q[n + 8],
    256. A = q[n + 9],
    257. B = q[n + 10],
    258. C = q[n + 11],
    259. u = q[n + 12],
    260. D = q[n + 13],
    261. E = q[n + 14],
    262. x = q[n + 15],
    263. f = a[0],
    264. m = a[1],
    265. g = a[2],
    266. h = a[3],
    267. f = p(f, m, g, h, c, 7, b[0]),
    268. h = p(h, f, m, g, e, 12, b[1]),
    269. g = p(g, h, f, m, j, 17, b[2]),
    270. m = p(m, g, h, f, k, 22, b[3]),
    271. f = p(f, m, g, h, z, 7, b[4]),
    272. h = p(h, f, m, g, r, 12, b[5]),
    273. g = p(g, h, f, m, t, 17, b[6]),
    274. m = p(m, g, h, f, w, 22, b[7]),
    275. f = p(f, m, g, h, v, 7, b[8]),
    276. h = p(h, f, m, g, A, 12, b[9]),
    277. g = p(g, h, f, m, B, 17, b[10]),
    278. m = p(m, g, h, f, C, 22, b[11]),
    279. f = p(f, m, g, h, u, 7, b[12]),
    280. h = p(h, f, m, g, D, 12, b[13]),
    281. g = p(g, h, f, m, E, 17, b[14]),
    282. m = p(m, g, h, f, x, 22, b[15]),
    283. f = d(f, m, g, h, e, 5, b[16]),
    284. h = d(h, f, m, g, t, 9, b[17]),
    285. g = d(g, h, f, m, C, 14, b[18]),
    286. m = d(m, g, h, f, c, 20, b[19]),
    287. f = d(f, m, g, h, r, 5, b[20]),
    288. h = d(h, f, m, g, B, 9, b[21]),
    289. g = d(g, h, f, m, x, 14, b[22]),
    290. m = d(m, g, h, f, z, 20, b[23]),
    291. f = d(f, m, g, h, A, 5, b[24]),
    292. h = d(h, f, m, g, E, 9, b[25]),
    293. g = d(g, h, f, m, k, 14, b[26]),
    294. m = d(m, g, h, f, v, 20, b[27]),
    295. f = d(f, m, g, h, D, 5, b[28]),
    296. h = d(h, f,
    297. m, g, j, 9, b[29]),
    298. g = d(g, h, f, m, w, 14, b[30]),
    299. m = d(m, g, h, f, u, 20, b[31]),
    300. f = l(f, m, g, h, r, 4, b[32]),
    301. h = l(h, f, m, g, v, 11, b[33]),
    302. g = l(g, h, f, m, C, 16, b[34]),
    303. m = l(m, g, h, f, E, 23, b[35]),
    304. f = l(f, m, g, h, e, 4, b[36]),
    305. h = l(h, f, m, g, z, 11, b[37]),
    306. g = l(g, h, f, m, w, 16, b[38]),
    307. m = l(m, g, h, f, B, 23, b[39]),
    308. f = l(f, m, g, h, D, 4, b[40]),
    309. h = l(h, f, m, g, c, 11, b[41]),
    310. g = l(g, h, f, m, k, 16, b[42]),
    311. m = l(m, g, h, f, t, 23, b[43]),
    312. f = l(f, m, g, h, A, 4, b[44]),
    313. h = l(h, f, m, g, u, 11, b[45]),
    314. g = l(g, h, f, m, x, 16, b[46]),
    315. m = l(m, g, h, f, j, 23, b[47]),
    316. f = s(f, m, g, h, c, 6, b[48]),
    317. h = s(h, f, m, g, w, 10, b[49]),
    318. g = s(g, h, f, m,
    319. E, 15, b[50]),
    320. m = s(m, g, h, f, r, 21, b[51]),
    321. f = s(f, m, g, h, u, 6, b[52]),
    322. h = s(h, f, m, g, k, 10, b[53]),
    323. g = s(g, h, f, m, B, 15, b[54]),
    324. m = s(m, g, h, f, e, 21, b[55]),
    325. f = s(f, m, g, h, v, 6, b[56]),
    326. h = s(h, f, m, g, x, 10, b[57]),
    327. g = s(g, h, f, m, t, 15, b[58]),
    328. m = s(m, g, h, f, D, 21, b[59]),
    329. f = s(f, m, g, h, z, 6, b[60]),
    330. h = s(h, f, m, g, C, 10, b[61]),
    331. g = s(g, h, f, m, j, 15, b[62]),
    332. m = s(m, g, h, f, A, 21, b[63]);
    333. a[0] = a[0] + f | 0;
    334. a[1] = a[1] + m | 0;
    335. a[2] = a[2] + g | 0;
    336. a[3] = a[3] + h | 0
    337. },
    338. _doFinalize: function() {
    339. var b = this._data,
    340. n = b.words,
    341. a = 8 * this._nDataBytes,
    342. c = 8 * b.sigBytes;
    343. n[c >>> 5] |= 128 << 24 - c % 32;
    344. var e = u.floor(a /
    345. 4294967296);
    346. n[(c + 64 >>> 9 << 4) + 15] = (e << 8 | e >>> 24) & 16711935 | (e << 24 | e >>> 8) & 4278255360;
    347. n[(c + 64 >>> 9 << 4) + 14] = (a << 8 | a >>> 24) & 16711935 | (a << 24 | a >>> 8) & 4278255360;
    348. b.sigBytes = 4 * (n.length + 1);
    349. this._process();
    350. b = this._hash;
    351. n = b.words;
    352. for (a = 0; 4 > a; a++) c = n[a], n[a] = (c << 8 | c >>> 24) & 16711935 | (c << 24 | c >>> 8) & 4278255360;
    353. return b
    354. },
    355. clone: function() {
    356. var b = v.clone.call(this);
    357. b._hash = this._hash.clone();
    358. return b
    359. }
    360. });
    361. t.MD5 = v._createHelper(r);
    362. t.HmacMD5 = v._createHmacHelper(r)
    363. })(Math);
    364. (function() {
    365. var u = CryptoJS,
    366. p = u.lib,
    367. d = p.Base,
    368. l = p.WordArray,
    369. p = u.algo,
    370. s = p.EvpKDF = d.extend({
    371. cfg: d.extend({
    372. keySize: 4,
    373. hasher: p.MD5,
    374. iterations: 1
    375. }),
    376. init: function(d) {
    377. this.cfg = this.cfg.extend(d)
    378. },
    379. compute: function(d, r) {
    380. for (var p = this.cfg, s = p.hasher.create(), b = l.create(), u = b.words, q = p.keySize, p = p.iterations; u.length < q;) {
    381. n && s.update(n);
    382. var n = s.update(d).finalize(r);
    383. s.reset();
    384. for (var a = 1; a < p; a++) n = s.finalize(n), s.reset();
    385. b.concat(n)
    386. }
    387. b.sigBytes = 4 * q;
    388. return b
    389. }
    390. });
    391. u.EvpKDF = function(d, l, p) {
    392. return s.create(p).compute(d,
    393. l)
    394. }
    395. })();
    396. CryptoJS.lib.Cipher || function(u) {
    397. var p = CryptoJS,
    398. d = p.lib,
    399. l = d.Base,
    400. s = d.WordArray,
    401. t = d.BufferedBlockAlgorithm,
    402. r = p.enc.Base64,
    403. w = p.algo.EvpKDF,
    404. v = d.Cipher = t.extend({
    405. cfg: l.extend(),
    406. createEncryptor: function(e, a) {
    407. return this.create(this._ENC_XFORM_MODE, e, a)
    408. },
    409. createDecryptor: function(e, a) {
    410. return this.create(this._DEC_XFORM_MODE, e, a)
    411. },
    412. init: function(e, a, b) {
    413. this.cfg = this.cfg.extend(b);
    414. this._xformMode = e;
    415. this._key = a;
    416. this.reset()
    417. },
    418. reset: function() {
    419. t.reset.call(this);
    420. this._doReset()
    421. },
    422. process: function(e) {
    423. this._append(e);
    424. return this._process()
    425. },
    426. finalize: function(e) {
    427. e && this._append(e);
    428. return this._doFinalize()
    429. },
    430. keySize: 4,
    431. ivSize: 4,
    432. _ENC_XFORM_MODE: 1,
    433. _DEC_XFORM_MODE: 2,
    434. _createHelper: function(e) {
    435. return {
    436. encrypt: function(b, k, d) {
    437. return ("string" == typeof k ? c : a).encrypt(e, b, k, d)
    438. },
    439. decrypt: function(b, k, d) {
    440. return ("string" == typeof k ? c : a).decrypt(e, b, k, d)
    441. }
    442. }
    443. }
    444. });
    445. d.StreamCipher = v.extend({
    446. _doFinalize: function() {
    447. return this._process(!0)
    448. },
    449. blockSize: 1
    450. });
    451. var b = p.mode = {},
    452. x = function(e, a, b) {
    453. var c = this._iv;
    454. c ? this._iv = u : c = this._prevBlock;
    455. for (var d = 0; d < b; d++) e[a + d] ^=
    456. c[d]
    457. },
    458. q = (d.BlockCipherMode = l.extend({
    459. createEncryptor: function(e, a) {
    460. return this.Encryptor.create(e, a)
    461. },
    462. createDecryptor: function(e, a) {
    463. return this.Decryptor.create(e, a)
    464. },
    465. init: function(e, a) {
    466. this._cipher = e;
    467. this._iv = a
    468. }
    469. })).extend();
    470. q.Encryptor = q.extend({
    471. processBlock: function(e, a) {
    472. var b = this._cipher,
    473. c = b.blockSize;
    474. x.call(this, e, a, c);
    475. b.encryptBlock(e, a);
    476. this._prevBlock = e.slice(a, a + c)
    477. }
    478. });
    479. q.Decryptor = q.extend({
    480. processBlock: function(e, a) {
    481. var b = this._cipher,
    482. c = b.blockSize,
    483. d = e.slice(a, a + c);
    484. b.decryptBlock(e, a);
    485. x.call(this,
    486. e, a, c);
    487. this._prevBlock = d
    488. }
    489. });
    490. b = b.CBC = q;
    491. q = (p.pad = {}).Pkcs7 = {
    492. pad: function(a, b) {
    493. for (var c = 4 * b, c = c - a.sigBytes % c, d = c << 24 | c << 16 | c << 8 | c, l = [], n = 0; n < c; n += 4) l.push(d);
    494. c = s.create(l, c);
    495. a.concat(c)
    496. },
    497. unpad: function(a) {
    498. a.sigBytes -= a.words[a.sigBytes - 1 >>> 2] & 255
    499. }
    500. };
    501. d.BlockCipher = v.extend({
    502. cfg: v.cfg.extend({
    503. mode: b,
    504. padding: q
    505. }),
    506. reset: function() {
    507. v.reset.call(this);
    508. var a = this.cfg,
    509. b = a.iv,
    510. a = a.mode;
    511. if (this._xformMode == this._ENC_XFORM_MODE) var c = a.createEncryptor;
    512. else c = a.createDecryptor, this._minBufferSize = 1;
    513. this._mode = c.call(a,
    514. this, b && b.words)
    515. },
    516. _doProcessBlock: function(a, b) {
    517. this._mode.processBlock(a, b)
    518. },
    519. _doFinalize: function() {
    520. var a = this.cfg.padding;
    521. if (this._xformMode == this._ENC_XFORM_MODE) {
    522. a.pad(this._data, this.blockSize);
    523. var b = this._process(!0)
    524. } else b = this._process(!0), a.unpad(b);
    525. return b
    526. },
    527. blockSize: 4
    528. });
    529. var n = d.CipherParams = l.extend({
    530. init: function(a) {
    531. this.mixIn(a)
    532. },
    533. toString: function(a) {
    534. return (a || this.formatter).stringify(this)
    535. }
    536. }),
    537. b = (p.format = {}).OpenSSL = {
    538. stringify: function(a) {
    539. var b = a.ciphertext;
    540. a = a.salt;
    541. return (a ? s.create([1398893684,
    542. 1701076831
    543. ]).concat(a).concat(b) : b).toString(r)
    544. },
    545. parse: function(a) {
    546. a = r.parse(a);
    547. var b = a.words;
    548. if (1398893684 == b[0] && 1701076831 == b[1]) {
    549. var c = s.create(b.slice(2, 4));
    550. b.splice(0, 4);
    551. a.sigBytes -= 16
    552. }
    553. return n.create({
    554. ciphertext: a,
    555. salt: c
    556. })
    557. }
    558. },
    559. a = d.SerializableCipher = l.extend({
    560. cfg: l.extend({
    561. format: b
    562. }),
    563. encrypt: function(a, b, c, d) {
    564. d = this.cfg.extend(d);
    565. var l = a.createEncryptor(c, d);
    566. b = l.finalize(b);
    567. l = l.cfg;
    568. return n.create({
    569. ciphertext: b,
    570. key: c,
    571. iv: l.iv,
    572. algorithm: a,
    573. mode: l.mode,
    574. padding: l.padding,
    575. blockSize: a.blockSize,
    576. formatter: d.format
    577. })
    578. },
    579. decrypt: function(a, b, c, d) {
    580. d = this.cfg.extend(d);
    581. b = this._parse(b, d.format);
    582. return a.createDecryptor(c, d).finalize(b.ciphertext)
    583. },
    584. _parse: function(a, b) {
    585. return "string" == typeof a ? b.parse(a, this) : a
    586. }
    587. }),
    588. p = (p.kdf = {}).OpenSSL = {
    589. execute: function(a, b, c, d) {
    590. d || (d = s.random(8));
    591. a = w.create({
    592. keySize: b + c
    593. }).compute(a, d);
    594. c = s.create(a.words.slice(b), 4 * c);
    595. a.sigBytes = 4 * b;
    596. return n.create({
    597. key: a,
    598. iv: c,
    599. salt: d
    600. })
    601. }
    602. },
    603. c = d.PasswordBasedCipher = a.extend({
    604. cfg: a.cfg.extend({
    605. kdf: p
    606. }),
    607. encrypt: function(b, c, d, l) {
    608. l = this.cfg.extend(l);
    609. d = l.kdf.execute(d,
    610. b.keySize, b.ivSize);
    611. l.iv = d.iv;
    612. b = a.encrypt.call(this, b, c, d.key, l);
    613. b.mixIn(d);
    614. return b
    615. },
    616. decrypt: function(b, c, d, l) {
    617. l = this.cfg.extend(l);
    618. c = this._parse(c, l.format);
    619. d = l.kdf.execute(d, b.keySize, b.ivSize, c.salt);
    620. l.iv = d.iv;
    621. return a.decrypt.call(this, b, c, d.key, l)
    622. }
    623. })
    624. }();
    625. (function() {
    626. for (var u = CryptoJS, p = u.lib.BlockCipher, d = u.algo, l = [], s = [], t = [], r = [], w = [], v = [], b = [], x = [], q = [], n = [], a = [], c = 0; 256 > c; c++) a[c] = 128 > c ? c << 1 : c << 1 ^ 283;
    627. for (var e = 0, j = 0, c = 0; 256 > c; c++) {
    628. var k = j ^ j << 1 ^ j << 2 ^ j << 3 ^ j << 4,
    629. k = k >>> 8 ^ k & 255 ^ 99;
    630. l[e] = k;
    631. s[k] = e;
    632. var z = a[e],
    633. F = a[z],
    634. G = a[F],
    635. y = 257 * a[k] ^ 16843008 * k;
    636. t[e] = y << 24 | y >>> 8;
    637. r[e] = y << 16 | y >>> 16;
    638. w[e] = y << 8 | y >>> 24;
    639. v[e] = y;
    640. y = 16843009 * G ^ 65537 * F ^ 257 * z ^ 16843008 * e;
    641. b[k] = y << 24 | y >>> 8;
    642. x[k] = y << 16 | y >>> 16;
    643. q[k] = y << 8 | y >>> 24;
    644. n[k] = y;
    645. e ? (e = z ^ a[a[a[G ^ z]]], j ^= a[a[j]]) : e = j = 1
    646. }
    647. var H = [0, 1, 2, 4, 8,
    648. 16, 32, 64, 128, 27, 54
    649. ],
    650. d = d.AES = p.extend({
    651. _doReset: function() {
    652. for (var a = this._key, c = a.words, d = a.sigBytes / 4, a = 4 * ((this._nRounds = d + 6) + 1), e = this._keySchedule = [], j = 0; j < a; j++)
    653. if (j < d) e[j] = c[j];
    654. else {
    655. var k = e[j - 1];
    656. j % d ? 6 < d && 4 == j % d && (k = l[k >>> 24] << 24 | l[k >>> 16 & 255] << 16 | l[k >>> 8 & 255] << 8 | l[k & 255]) : (k = k << 8 | k >>> 24, k = l[k >>> 24] << 24 | l[k >>> 16 & 255] << 16 | l[k >>> 8 & 255] << 8 | l[k & 255], k ^= H[j / d | 0] << 24);
    657. e[j] = e[j - d] ^ k
    658. }
    659. c = this._invKeySchedule = [];
    660. for (d = 0; d < a; d++) j = a - d, k = d % 4 ? e[j] : e[j - 4], c[d] = 4 > d || 4 >= j ? k : b[l[k >>> 24]] ^ x[l[k >>> 16 & 255]] ^ q[l[k >>>
    661. 8 & 255]] ^ n[l[k & 255]]
    662. },
    663. encryptBlock: function(a, b) {
    664. this._doCryptBlock(a, b, this._keySchedule, t, r, w, v, l)
    665. },
    666. decryptBlock: function(a, c) {
    667. var d = a[c + 1];
    668. a[c + 1] = a[c + 3];
    669. a[c + 3] = d;
    670. this._doCryptBlock(a, c, this._invKeySchedule, b, x, q, n, s);
    671. d = a[c + 1];
    672. a[c + 1] = a[c + 3];
    673. a[c + 3] = d
    674. },
    675. _doCryptBlock: function(a, b, c, d, e, j, l, f) {
    676. for (var m = this._nRounds, g = a[b] ^ c[0], h = a[b + 1] ^ c[1], k = a[b + 2] ^ c[2], n = a[b + 3] ^ c[3], p = 4, r = 1; r < m; r++) var q = d[g >>> 24] ^ e[h >>> 16 & 255] ^ j[k >>> 8 & 255] ^ l[n & 255] ^ c[p++],
    677. s = d[h >>> 24] ^ e[k >>> 16 & 255] ^ j[n >>> 8 & 255] ^ l[g & 255] ^ c[p++],
    678. t =
    679. d[k >>> 24] ^ e[n >>> 16 & 255] ^ j[g >>> 8 & 255] ^ l[h & 255] ^ c[p++],
    680. n = d[n >>> 24] ^ e[g >>> 16 & 255] ^ j[h >>> 8 & 255] ^ l[k & 255] ^ c[p++],
    681. g = q,
    682. h = s,
    683. k = t;
    684. q = (f[g >>> 24] << 24 | f[h >>> 16 & 255] << 16 | f[k >>> 8 & 255] << 8 | f[n & 255]) ^ c[p++];
    685. s = (f[h >>> 24] << 24 | f[k >>> 16 & 255] << 16 | f[n >>> 8 & 255] << 8 | f[g & 255]) ^ c[p++];
    686. t = (f[k >>> 24] << 24 | f[n >>> 16 & 255] << 16 | f[g >>> 8 & 255] << 8 | f[h & 255]) ^ c[p++];
    687. n = (f[n >>> 24] << 24 | f[g >>> 16 & 255] << 16 | f[h >>> 8 & 255] << 8 | f[k & 255]) ^ c[p++];
    688. a[b] = q;
    689. a[b + 1] = s;
    690. a[b + 2] = t;
    691. a[b + 3] = n
    692. },
    693. keySize: 8
    694. });
    695. u.AES = p._createHelper(d)
    696. })();
    697. module.exports = CryptoJS

    aes.js

    1. var CryptoJS = require('./CryptoJS.js'); //引用AES源码js
    2. var key = CryptoJS.enc.Utf8.parse("0102030405060708"); //十六位十六进制数作为秘钥
    3. var iv = CryptoJS.enc.Utf8.parse('abcdefghijklmn');//十六位十六进制数作为秘钥偏移量
    4. //解密方法
    5. function Decrypt(word) {
    6. var encryptedHexStr = CryptoJS.enc.Hex.parse(word);
    7. var srcs = CryptoJS.enc.Base64.stringify(encryptedHexStr);
    8. var decrypt = CryptoJS.AES.decrypt(srcs, key, {
    9. iv: iv,
    10. mode: CryptoJS.mode.CBC,
    11. padding: CryptoJS.pad.Pkcs7
    12. });
    13. var decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
    14. return decryptedStr.toString();
    15. }
    16. //加密方法
    17. function Encrypt(word) {
    18. var srcs = CryptoJS.enc.Utf8.parse(word);
    19. var encrypted = CryptoJS.AES.encrypt(srcs, key, {
    20. iv: iv,
    21. mode: CryptoJS.mode.CBC,
    22. padding: CryptoJS.pad.Pkcs7
    23. });
    24. return encrypted.ciphertext.toString().toUpperCase();
    25. }
    26. //暴露接口
    27. module.exports.Decrypt = Decrypt;
    28. module.exports.Encrypt = Encrypt;

    import {Encrypt} from '@/utils/aes.js'

    Encrypt(this.password)

  • 相关阅读:
    SpringBoot 阶段测试 1
    SpringCloud学习笔记 - 服务调用、负载均衡组件 - ribbon
    关于数据mysql ->maxwell->kafka的数据传输
    9. SAP ABAP OData 服务如何支持删除(Delete)操作
    ubuntu_24.04 Noble LTS安装docker desktop启动无窗口及引擎启动失败的解决方法
    基于粒子群优化算法的最优潮流(IEEE30节点(Matlab代码实现)
    C语言程序设计(第五版)书上习题及课后习题与答案汇总(只涉及程序编写部分)--持续更新
    一致性hash算法
    mp4音视频分离技术
    【宋红康 MySQL数据库 】【高级篇】【17】MySQL事务日志:redo、undo
  • 原文地址:https://blog.csdn.net/steve_frank/article/details/132888989