flat: 暂存
This commit is contained in:
1
App.vue
1
App.vue
@@ -51,6 +51,7 @@ function getUserInfo() {
|
|||||||
const sm2_privateKey = config.appInfo.sm2PrivateKey;
|
const sm2_privateKey = config.appInfo.sm2PrivateKey;
|
||||||
let sm2_encrypt_result = data.data;
|
let sm2_encrypt_result = data.data;
|
||||||
let sm2_decrypt_result = sm2_Decrypt(sm2_encrypt_result, sm2_privateKey);
|
let sm2_decrypt_result = sm2_Decrypt(sm2_encrypt_result, sm2_privateKey);
|
||||||
|
console.log(sm2_decrypt_result);
|
||||||
if (typeof sm2_decrypt_result == 'string') sm2_decrypt_result = JSON.parse(sm2_decrypt_result);
|
if (typeof sm2_decrypt_result == 'string') sm2_decrypt_result = JSON.parse(sm2_decrypt_result);
|
||||||
|
|
||||||
// 其次,对sm2解密后的结果进行 aes解密
|
// 其次,对sm2解密后的结果进行 aes解密
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import '@/lib/encryption/sm4.min.js'
|
||||||
import useUserStore from "../stores/useUserStore";
|
import useUserStore from "../stores/useUserStore";
|
||||||
import {
|
import {
|
||||||
createRequest,
|
createRequest,
|
||||||
@@ -7,9 +8,6 @@ import streamRequest, {
|
|||||||
chatRequest
|
chatRequest
|
||||||
} from "../utils/streamRequest.js";
|
} from "../utils/streamRequest.js";
|
||||||
|
|
||||||
const sm4 = typeof window.sm4 !== 'undefined' ? window.sm4 :
|
|
||||||
(typeof window.smCrypto !== 'undefined' ? window.smCrypto.sm4 : null);
|
|
||||||
|
|
||||||
export const CloneDeep = (props) => {
|
export const CloneDeep = (props) => {
|
||||||
if (typeof props !== 'object' || props === null) {
|
if (typeof props !== 'object' || props === null) {
|
||||||
return props
|
return props
|
||||||
@@ -564,7 +562,6 @@ function aes_Decrypt(word, key) {
|
|||||||
})
|
})
|
||||||
return decrypt.toString(CryptoJS.enc.Utf8)
|
return decrypt.toString(CryptoJS.enc.Utf8)
|
||||||
}
|
}
|
||||||
|
|
||||||
export function sm2_Decrypt(word, key) {
|
export function sm2_Decrypt(word, key) {
|
||||||
return SM.decrypt(word, key);
|
return SM.decrypt(word, key);
|
||||||
}
|
}
|
||||||
@@ -588,7 +585,7 @@ export function sm4Decrypt(key, value, mode = "hex") {
|
|||||||
return decrypted
|
return decrypted
|
||||||
|
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.log('解密失败')
|
console.log('解密失败', e)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -24,15 +24,10 @@
|
|||||||
</script>
|
</script>
|
||||||
<!-- 爱山东jssdk 本sdk存在性能问题 -->
|
<!-- 爱山东jssdk 本sdk存在性能问题 -->
|
||||||
<script type="text/javascript" src="https://isdapp.shandong.gov.cn/jmopen/jssdk/index.js"></script>
|
<script type="text/javascript" src="https://isdapp.shandong.gov.cn/jmopen/jssdk/index.js"></script>
|
||||||
|
<!-- 只在内网有效 -->
|
||||||
<script type="text/javascript" src="./static/js/sm4.min.js"></script>
|
|
||||||
|
|
||||||
<script type="text/javascript" src="./static/js/SM.js"></script>
|
<script type="text/javascript" src="./static/js/SM.js"></script>
|
||||||
|
|
||||||
<script type="text/javascript" src="./static/js/aes.js"></script>
|
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
<!-- <body> -->
|
<body>
|
||||||
<div id="app"><!--app-html--></div>
|
<div id="app"><!--app-html--></div>
|
||||||
<script type="module" src="/main.js"></script>
|
<script type="module" src="/main.js"></script>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
7
lib/encryption/sm2.min.js
vendored
Normal file
7
lib/encryption/sm2.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
234
static/js/aes.js
234
static/js/aes.js
@@ -1,234 +0,0 @@
|
|||||||
;(function (root, factory, undef) {
|
|
||||||
if (typeof exports === "object") {
|
|
||||||
// CommonJS
|
|
||||||
module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core"));
|
|
||||||
}
|
|
||||||
else if (typeof define === "function" && define.amd) {
|
|
||||||
// AMD
|
|
||||||
define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// Global (browser)
|
|
||||||
factory(root.CryptoJS);
|
|
||||||
}
|
|
||||||
}(this, function (CryptoJS) {
|
|
||||||
|
|
||||||
(function () {
|
|
||||||
// Shortcuts
|
|
||||||
var C = CryptoJS;
|
|
||||||
var C_lib = C.lib;
|
|
||||||
var BlockCipher = C_lib.BlockCipher;
|
|
||||||
var C_algo = C.algo;
|
|
||||||
|
|
||||||
// Lookup tables
|
|
||||||
var SBOX = [];
|
|
||||||
var INV_SBOX = [];
|
|
||||||
var SUB_MIX_0 = [];
|
|
||||||
var SUB_MIX_1 = [];
|
|
||||||
var SUB_MIX_2 = [];
|
|
||||||
var SUB_MIX_3 = [];
|
|
||||||
var INV_SUB_MIX_0 = [];
|
|
||||||
var INV_SUB_MIX_1 = [];
|
|
||||||
var INV_SUB_MIX_2 = [];
|
|
||||||
var INV_SUB_MIX_3 = [];
|
|
||||||
|
|
||||||
// Compute lookup tables
|
|
||||||
(function () {
|
|
||||||
// Compute double table
|
|
||||||
var d = [];
|
|
||||||
for (var i = 0; i < 256; i++) {
|
|
||||||
if (i < 128) {
|
|
||||||
d[i] = i << 1;
|
|
||||||
} else {
|
|
||||||
d[i] = (i << 1) ^ 0x11b;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Walk GF(2^8)
|
|
||||||
var x = 0;
|
|
||||||
var xi = 0;
|
|
||||||
for (var i = 0; i < 256; i++) {
|
|
||||||
// Compute sbox
|
|
||||||
var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4);
|
|
||||||
sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63;
|
|
||||||
SBOX[x] = sx;
|
|
||||||
INV_SBOX[sx] = x;
|
|
||||||
|
|
||||||
// Compute multiplication
|
|
||||||
var x2 = d[x];
|
|
||||||
var x4 = d[x2];
|
|
||||||
var x8 = d[x4];
|
|
||||||
|
|
||||||
// Compute sub bytes, mix columns tables
|
|
||||||
var t = (d[sx] * 0x101) ^ (sx * 0x1010100);
|
|
||||||
SUB_MIX_0[x] = (t << 24) | (t >>> 8);
|
|
||||||
SUB_MIX_1[x] = (t << 16) | (t >>> 16);
|
|
||||||
SUB_MIX_2[x] = (t << 8) | (t >>> 24);
|
|
||||||
SUB_MIX_3[x] = t;
|
|
||||||
|
|
||||||
// Compute inv sub bytes, inv mix columns tables
|
|
||||||
var t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100);
|
|
||||||
INV_SUB_MIX_0[sx] = (t << 24) | (t >>> 8);
|
|
||||||
INV_SUB_MIX_1[sx] = (t << 16) | (t >>> 16);
|
|
||||||
INV_SUB_MIX_2[sx] = (t << 8) | (t >>> 24);
|
|
||||||
INV_SUB_MIX_3[sx] = t;
|
|
||||||
|
|
||||||
// Compute next counter
|
|
||||||
if (!x) {
|
|
||||||
x = xi = 1;
|
|
||||||
} else {
|
|
||||||
x = x2 ^ d[d[d[x8 ^ x2]]];
|
|
||||||
xi ^= d[d[xi]];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}());
|
|
||||||
|
|
||||||
// Precomputed Rcon lookup
|
|
||||||
var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36];
|
|
||||||
|
|
||||||
/**
|
|
||||||
* AES block cipher algorithm.
|
|
||||||
*/
|
|
||||||
var AES = C_algo.AES = BlockCipher.extend({
|
|
||||||
_doReset: function () {
|
|
||||||
var t;
|
|
||||||
|
|
||||||
// Skip reset of nRounds has been set before and key did not change
|
|
||||||
if (this._nRounds && this._keyPriorReset === this._key) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Shortcuts
|
|
||||||
var key = this._keyPriorReset = this._key;
|
|
||||||
var keyWords = key.words;
|
|
||||||
var keySize = key.sigBytes / 4;
|
|
||||||
|
|
||||||
// Compute number of rounds
|
|
||||||
var nRounds = this._nRounds = keySize + 6;
|
|
||||||
|
|
||||||
// Compute number of key schedule rows
|
|
||||||
var ksRows = (nRounds + 1) * 4;
|
|
||||||
|
|
||||||
// Compute key schedule
|
|
||||||
var keySchedule = this._keySchedule = [];
|
|
||||||
for (var ksRow = 0; ksRow < ksRows; ksRow++) {
|
|
||||||
if (ksRow < keySize) {
|
|
||||||
keySchedule[ksRow] = keyWords[ksRow];
|
|
||||||
} else {
|
|
||||||
t = keySchedule[ksRow - 1];
|
|
||||||
|
|
||||||
if (!(ksRow % keySize)) {
|
|
||||||
// Rot word
|
|
||||||
t = (t << 8) | (t >>> 24);
|
|
||||||
|
|
||||||
// Sub word
|
|
||||||
t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff];
|
|
||||||
|
|
||||||
// Mix Rcon
|
|
||||||
t ^= RCON[(ksRow / keySize) | 0] << 24;
|
|
||||||
} else if (keySize > 6 && ksRow % keySize == 4) {
|
|
||||||
// Sub word
|
|
||||||
t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff];
|
|
||||||
}
|
|
||||||
|
|
||||||
keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Compute inv key schedule
|
|
||||||
var invKeySchedule = this._invKeySchedule = [];
|
|
||||||
for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) {
|
|
||||||
var ksRow = ksRows - invKsRow;
|
|
||||||
|
|
||||||
if (invKsRow % 4) {
|
|
||||||
var t = keySchedule[ksRow];
|
|
||||||
} else {
|
|
||||||
var t = keySchedule[ksRow - 4];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (invKsRow < 4 || ksRow <= 4) {
|
|
||||||
invKeySchedule[invKsRow] = t;
|
|
||||||
} else {
|
|
||||||
invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[(t >>> 16) & 0xff]] ^
|
|
||||||
INV_SUB_MIX_2[SBOX[(t >>> 8) & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
encryptBlock: function (M, offset) {
|
|
||||||
this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX);
|
|
||||||
},
|
|
||||||
|
|
||||||
decryptBlock: function (M, offset) {
|
|
||||||
// Swap 2nd and 4th rows
|
|
||||||
var t = M[offset + 1];
|
|
||||||
M[offset + 1] = M[offset + 3];
|
|
||||||
M[offset + 3] = t;
|
|
||||||
|
|
||||||
this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX);
|
|
||||||
|
|
||||||
// Inv swap 2nd and 4th rows
|
|
||||||
var t = M[offset + 1];
|
|
||||||
M[offset + 1] = M[offset + 3];
|
|
||||||
M[offset + 3] = t;
|
|
||||||
},
|
|
||||||
|
|
||||||
_doCryptBlock: function (M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) {
|
|
||||||
// Shortcut
|
|
||||||
var nRounds = this._nRounds;
|
|
||||||
|
|
||||||
// Get input, add round key
|
|
||||||
var s0 = M[offset] ^ keySchedule[0];
|
|
||||||
var s1 = M[offset + 1] ^ keySchedule[1];
|
|
||||||
var s2 = M[offset + 2] ^ keySchedule[2];
|
|
||||||
var s3 = M[offset + 3] ^ keySchedule[3];
|
|
||||||
|
|
||||||
// Key schedule row counter
|
|
||||||
var ksRow = 4;
|
|
||||||
|
|
||||||
// Rounds
|
|
||||||
for (var round = 1; round < nRounds; round++) {
|
|
||||||
// Shift rows, sub bytes, mix columns, add round key
|
|
||||||
var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[(s1 >>> 16) & 0xff] ^ SUB_MIX_2[(s2 >>> 8) & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++];
|
|
||||||
var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[(s2 >>> 16) & 0xff] ^ SUB_MIX_2[(s3 >>> 8) & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++];
|
|
||||||
var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[(s3 >>> 16) & 0xff] ^ SUB_MIX_2[(s0 >>> 8) & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++];
|
|
||||||
var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[(s0 >>> 16) & 0xff] ^ SUB_MIX_2[(s1 >>> 8) & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++];
|
|
||||||
|
|
||||||
// Update state
|
|
||||||
s0 = t0;
|
|
||||||
s1 = t1;
|
|
||||||
s2 = t2;
|
|
||||||
s3 = t3;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Shift rows, sub bytes, add round key
|
|
||||||
var t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++];
|
|
||||||
var t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++];
|
|
||||||
var t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++];
|
|
||||||
var t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++];
|
|
||||||
|
|
||||||
// Set output
|
|
||||||
M[offset] = t0;
|
|
||||||
M[offset + 1] = t1;
|
|
||||||
M[offset + 2] = t2;
|
|
||||||
M[offset + 3] = t3;
|
|
||||||
},
|
|
||||||
|
|
||||||
keySize: 256/32
|
|
||||||
});
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Shortcut functions to the cipher's object interface.
|
|
||||||
*
|
|
||||||
* @example
|
|
||||||
*
|
|
||||||
* var ciphertext = CryptoJS.AES.encrypt(message, key, cfg);
|
|
||||||
* var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg);
|
|
||||||
*/
|
|
||||||
C.AES = BlockCipher._createHelper(AES);
|
|
||||||
}());
|
|
||||||
|
|
||||||
|
|
||||||
return CryptoJS.AES;
|
|
||||||
|
|
||||||
}));
|
|
||||||
@@ -76,8 +76,8 @@ export function createRequest(url, data = {}, method = 'GET', loading = false, h
|
|||||||
// 响应拦截
|
// 响应拦截
|
||||||
if (resData.statusCode === 200) {
|
if (resData.statusCode === 200) {
|
||||||
if (resData.data.encrypted) {
|
if (resData.data.encrypted) {
|
||||||
const decryptedData = sm4Decrypt(config
|
const decryptedData = sm4Decrypt(config.sm4Config.key, resData.data
|
||||||
.sm4Config.key, resData.data.encryptedData)
|
.encryptedData)
|
||||||
resData.data = JSON.parse(decryptedData)
|
resData.data = JSON.parse(decryptedData)
|
||||||
}
|
}
|
||||||
const {
|
const {
|
||||||
@@ -85,7 +85,6 @@ export function createRequest(url, data = {}, method = 'GET', loading = false, h
|
|||||||
msg
|
msg
|
||||||
} = resData.data
|
} = resData.data
|
||||||
if (code === 200) {
|
if (code === 200) {
|
||||||
console.log(resData.data)
|
|
||||||
resolve(resData.data)
|
resolve(resData.data)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user