修正SM4解密时产生错误结果的bug
This commit is contained in:
1 parent
f0e4a777d9
commit
b29add4ae5
5 files changed
+139
-107
No files matched your search
+2
-2
@@ -32,8 +32,8 @@ coverage
|
|||||||
# files created with miaoShare service
|
# files created with miaoShare service
|
||||||
temp
|
temp
|
||||||
miaoShare.db
|
miaoShare.db
|
||||||
addUser.js
|
# addUser.js
|
||||||
removeUser.js
|
# removeUser.js
|
||||||
|
|
||||||
# JWT SK
|
# JWT SK
|
||||||
*.key
|
*.key
|
||||||
+16
@@ -0,0 +1,16 @@
|
|||||||
|
import sha256 from 'crypto-js/sha256.js';
|
||||||
|
import Database from "better-sqlite3";
|
||||||
|
|
||||||
|
|
||||||
|
const dbPath = "./miaoShare.db";
|
||||||
|
|
||||||
|
const db = new Database(dbPath, { verbose: null });
|
||||||
|
const stmt_insertId2FileName = db.prepare(`INSERT INTO USERS (user_id, password_hash, user_group, uploadFilesSizeCount) VALUES (?, ?, ?, 0)`);
|
||||||
|
|
||||||
|
let userList = [
|
||||||
|
['539943419','zjh030628','admin'],
|
||||||
|
// ['guest','guest','guest']
|
||||||
|
].map(a=>{a[1]=sha256(a[0]+sha256(a[1]).toString()).toString();return a})
|
||||||
|
for(let i of userList){
|
||||||
|
stmt_insertId2FileName.run(...i)
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
import sha256 from 'crypto-js/sha256.js';
|
||||||
|
import Database from "better-sqlite3";
|
||||||
|
|
||||||
|
|
||||||
|
const dbPath = "./miaoShare.db";
|
||||||
|
|
||||||
|
const db = new Database(dbPath, { verbose: null });
|
||||||
|
const stmt_ = db.prepare(`DELETE FROM USERS WHERE user_id = ?`);
|
||||||
|
|
||||||
|
let userList = [
|
||||||
|
['admin'],["guest"]
|
||||||
|
]
|
||||||
|
for(let i of userList){
|
||||||
|
stmt_.run(...i)
|
||||||
|
}
|
||||||
+4
-3
@@ -1,4 +1,5 @@
|
|||||||
import sm4_encrypt_worker from '@/worker/sm4_encrypt?worker'
|
import sm4_encrypt_worker from '@/worker/sm4_encrypt?worker'
|
||||||
|
import sm4_decrypt_worker from '@/worker/sm4_decrypt?worker'
|
||||||
|
|
||||||
const SM4 = {
|
const SM4 = {
|
||||||
encrypt: async (key, data) => {
|
encrypt: async (key, data) => {
|
||||||
@@ -12,14 +13,14 @@ const SM4 = {
|
|||||||
return encryptedBytes
|
return encryptedBytes
|
||||||
},
|
},
|
||||||
decrypt: async (key, data) => {
|
decrypt: async (key, data) => {
|
||||||
const encryptedBytes = await new Promise((resolve) => {
|
const decryptedBytes = await new Promise((resolve) => {
|
||||||
const sm4Worker = new sm4_encrypt_worker()
|
const sm4Worker = new sm4_decrypt_worker()
|
||||||
sm4Worker.onmessage = (event) => {
|
sm4Worker.onmessage = (event) => {
|
||||||
resolve(event.data)
|
resolve(event.data)
|
||||||
}
|
}
|
||||||
sm4Worker.postMessage({ data, key })
|
sm4Worker.postMessage({ data, key })
|
||||||
})
|
})
|
||||||
return encryptedBytes
|
return decryptedBytes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+102
-102
@@ -1,55 +1,55 @@
|
|||||||
import aesjs from 'aes-js'
|
import aesjs from "aes-js";
|
||||||
import { Base64 } from 'js-base64'
|
import { Base64 } from "js-base64";
|
||||||
import { sm4 } from 'sm-crypto'
|
import { sm4 } from "sm-crypto";
|
||||||
import AES from './AES'
|
import AES from "./AES";
|
||||||
import SM4 from './SM4'
|
import SM4 from "./SM4";
|
||||||
|
|
||||||
// const setting = useSettingStore();
|
// const setting = useSettingStore();
|
||||||
// const message = useMessage();
|
// const message = useMessage();
|
||||||
|
|
||||||
// 生成密钥
|
// 生成密钥
|
||||||
const generateKey = function (setting) {
|
const generateKey = function (setting) {
|
||||||
if (setting.activeFuction === '不加密') {
|
if (setting.activeFuction === "不加密") {
|
||||||
return ''
|
return "";
|
||||||
}
|
}
|
||||||
var charMap = ''
|
var charMap = "";
|
||||||
for (let i of setting.activeKeyMap) {
|
for (let i of setting.activeKeyMap) {
|
||||||
if (i === 'A-Z') {
|
if (i === "A-Z") {
|
||||||
charMap = charMap + 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
|
charMap = charMap + "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
||||||
} else if (i === 'a-z') {
|
} else if (i === "a-z") {
|
||||||
charMap = charMap + 'abcdefghijklmnopqrstuvwxyz'
|
charMap = charMap + "abcdefghijklmnopqrstuvwxyz";
|
||||||
} else if (i === '0-9') {
|
} else if (i === "0-9") {
|
||||||
charMap = charMap + '0123456789'
|
charMap = charMap + "0123456789";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var returnStr = '',
|
var returnStr = "",
|
||||||
length = setting.activeFuction !== 'AES256' ? 16 : 32
|
length = setting.activeFuction !== "AES256" ? 16 : 32;
|
||||||
// charMap = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
|
// charMap = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
|
||||||
|
|
||||||
for (var i = 0; i < length; i++) {
|
for (var i = 0; i < length; i++) {
|
||||||
var index = parseInt(Math.random() * charMap.length)
|
var index = parseInt(Math.random() * charMap.length);
|
||||||
returnStr += charMap.substring(index, index + 1)
|
returnStr += charMap.substring(index, index + 1);
|
||||||
}
|
}
|
||||||
if (setting.activeFuction === 'SM4') {
|
if (setting.activeFuction === "SM4") {
|
||||||
returnStr = 'SM4' + returnStr
|
returnStr = "SM4" + returnStr;
|
||||||
}
|
}
|
||||||
// console.log(returnStr,returnStr.length)
|
// console.log(returnStr,returnStr.length)
|
||||||
return returnStr
|
return returnStr;
|
||||||
}
|
};
|
||||||
const blob2Uint8Array = function (blob) {
|
const blob2Uint8Array = function (blob) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let reader = new FileReader()
|
let reader = new FileReader();
|
||||||
reader.readAsArrayBuffer(blob)
|
reader.readAsArrayBuffer(blob);
|
||||||
reader.onload = function () {
|
reader.onload = function () {
|
||||||
let buffer = reader.result
|
let buffer = reader.result;
|
||||||
let uint8array = new Uint8Array(buffer)
|
let uint8array = new Uint8Array(buffer);
|
||||||
resolve(uint8array)
|
resolve(uint8array);
|
||||||
}
|
};
|
||||||
reader.onerror = function () {
|
reader.onerror = function () {
|
||||||
reject(reader.error)
|
reject(reader.error);
|
||||||
}
|
};
|
||||||
})
|
});
|
||||||
}
|
};
|
||||||
|
|
||||||
// const AES = (key, data) => {
|
// const AES = (key, data) => {
|
||||||
// key = aesjs.utils.utf8.toBytes(key)
|
// key = aesjs.utils.utf8.toBytes(key)
|
||||||
@@ -74,65 +74,65 @@ const blob2Uint8Array = function (blob) {
|
|||||||
// return new Uint8Array(encryptedBytes)
|
// return new Uint8Array(encryptedBytes)
|
||||||
// }
|
// }
|
||||||
const encrypt = (key, data, fileName, setting, message) => {
|
const encrypt = (key, data, fileName, setting, message) => {
|
||||||
// if(!encryptFunction){
|
// if(!encryptFunction){
|
||||||
// encryptFunction = setting.activeFuction
|
// encryptFunction = setting.activeFuction
|
||||||
// }
|
// }
|
||||||
let encryptFunction = {
|
let encryptFunction = {
|
||||||
0: '不加密',
|
0: "不加密",
|
||||||
16: 'AES128',
|
16: "AES128",
|
||||||
19: 'SM4',
|
19: "SM4",
|
||||||
32: 'AES256'
|
32: "AES256"
|
||||||
}[key.length]
|
}[key.length];
|
||||||
return blob2Uint8Array(data).then(async (data) => {
|
return blob2Uint8Array(data).then(async data => {
|
||||||
let encrypted_data = null
|
let encrypted_data = null;
|
||||||
if (encryptFunction === '不加密' || key === '') {
|
if (encryptFunction === "不加密" || key === "") {
|
||||||
encrypted_data = data
|
encrypted_data = data;
|
||||||
// AES
|
// AES
|
||||||
} else if (encryptFunction != 'SM4') {
|
} else if (encryptFunction != "SM4") {
|
||||||
if (message) message.info(`开始加密${fileName}`)
|
if (message) message.info(`开始加密${fileName}`);
|
||||||
encrypted_data = await AES(key, data)
|
encrypted_data = await AES(key, data);
|
||||||
if (message) message.info(`${fileName}加密完成`)
|
if (message) message.info(`${fileName}加密完成`);
|
||||||
// SM4
|
// SM4
|
||||||
} else {
|
} else {
|
||||||
if (message) message.info(`开始加密${fileName}`)
|
if (message) message.info(`开始加密${fileName}`);
|
||||||
key = [...aesjs.utils.utf8.toBytes(key.substring(3))]
|
key = [...aesjs.utils.utf8.toBytes(key.substring(3))];
|
||||||
encrypted_data = await SM4.encrypt(key, data)
|
encrypted_data = await SM4.encrypt(key, data);
|
||||||
if (message) message.info(`${fileName}加密完成`)
|
if (message) message.info(`${fileName}加密完成`);
|
||||||
}
|
}
|
||||||
console.log(encrypted_data)
|
console.log(encrypted_data);
|
||||||
return encrypted_data
|
return encrypted_data;
|
||||||
})
|
});
|
||||||
}
|
};
|
||||||
|
|
||||||
// setting为pinia存储的setting。。。
|
// setting为pinia存储的setting。。。
|
||||||
const encryptString = (key, str, setting) => {
|
const encryptString = (key, str, setting) => {
|
||||||
// if(!encryptFunction){
|
// if(!encryptFunction){
|
||||||
// encryptFunction = setting.activeFuction
|
// encryptFunction = setting.activeFuction
|
||||||
// }
|
// }
|
||||||
// console.log(key,key.length)
|
// console.log(key,key.length)
|
||||||
let encryptFunction = {
|
let encryptFunction = {
|
||||||
0: '不加密',
|
0: "不加密",
|
||||||
16: 'AES128',
|
16: "AES128",
|
||||||
19: 'SM4',
|
19: "SM4",
|
||||||
32: 'AES256'
|
32: "AES256"
|
||||||
}[key.length]
|
}[key.length];
|
||||||
if (encryptFunction === '不加密' || key === '') {
|
if (encryptFunction === "不加密" || key === "") {
|
||||||
// return sm4.encrypt(str, 'miaospringmiaospringmiaospringao')
|
// return sm4.encrypt(str, 'miaospringmiaospringmiaospringao')
|
||||||
return Base64.encode(str)
|
return Base64.encode(str);
|
||||||
} else if (encryptFunction !== 'SM4') {
|
} else if (encryptFunction !== "SM4") {
|
||||||
key = aesjs.utils.utf8.toBytes(key)
|
key = aesjs.utils.utf8.toBytes(key);
|
||||||
// var data = aesjs.utils.utf8.toBytes(str);
|
// var data = aesjs.utils.utf8.toBytes(str);
|
||||||
var data = new TextEncoder().encode(str)
|
var data = new TextEncoder().encode(str);
|
||||||
var aesCtr = new aesjs.ModeOfOperation.ctr(key, new aesjs.Counter(5))
|
var aesCtr = new aesjs.ModeOfOperation.ctr(key, new aesjs.Counter(5));
|
||||||
var encryptedBytes = aesCtr.encrypt(data)
|
var encryptedBytes = aesCtr.encrypt(data);
|
||||||
var res = Base64.fromUint8Array(encryptedBytes, true)
|
var res = Base64.fromUint8Array(encryptedBytes, true);
|
||||||
// console.log(encryptedBytes,res)
|
// console.log(encryptedBytes,res)
|
||||||
return res
|
return res;
|
||||||
} else {
|
} else {
|
||||||
key = [...aesjs.utils.utf8.toBytes(key.substring(3))]
|
key = [...aesjs.utils.utf8.toBytes(key.substring(3))];
|
||||||
// console.log(key)
|
// console.log(key)
|
||||||
return sm4.encrypt(str, key)
|
return sm4.encrypt(str, key);
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
export { encrypt, encryptString, generateKey }
|
export { encrypt, encryptString, generateKey };
|
||||||
Reference in new issue
Block a user