修正SM4解密时产生错误结果的bug

This commit is contained in:
539943419 committed 2024-07-19 19:59:16 +08:00
1 parent f0e4a777d9
commit b29add4ae5
5 files changed
+139 -107

No files matched your search

+2 -2
View File
@@ -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
View File
@@ -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)
}
+15
View File
@@ -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
View File
@@ -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
View File
@@ -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 };