From f0e4a777d960d1435cfd378b3cd939c7cbaa29c7 Mon Sep 17 00:00:00 2001 From: Zhoujiahui <539943419@qq.com> Date: Fri, 19 Jul 2024 17:24:08 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E4=BD=BF=E7=94=A8worker?= =?UTF-8?q?=E8=BF=9B=E8=A1=8C=E5=8A=A0=E5=AF=86=E8=A7=A3=E5=AF=86=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/func/SM4.js | 41 ++++++++++++++++----------- src/func/download.js | 17 +++++++---- src/func/upload.js | 3 +- src/worker/aes_ctr.js | 2 +- src/worker/sm4_decrypt.js | 9 ++++++ src/worker/{sm4.js => sm4_encrypt.js} | 2 +- 6 files changed, 48 insertions(+), 26 deletions(-) create mode 100644 src/worker/sm4_decrypt.js rename src/worker/{sm4.js => sm4_encrypt.js} (83%) diff --git a/src/func/SM4.js b/src/func/SM4.js index 8ff6227..206e72f 100644 --- a/src/func/SM4.js +++ b/src/func/SM4.js @@ -1,19 +1,26 @@ -import sm4_worker from '@/worker/sm4?worker' +import sm4_encrypt_worker from '@/worker/sm4_encrypt?worker' -export default async (key, data) => { - // console.log(key) - // key = aesjs.utils.utf8.toBytes(key) - const encryptedBytes = await new Promise((resolve) => { - const aesWorker = new sm4_worker() - aesWorker.onmessage = (event) => { - resolve(event.data) - } - aesWorker.postMessage({ data, key }) - }) - // var encryptedBytes = sm4.encrypt(data, key, { - // padding: 'pkcs#7', - // output: 'array' - // }) - // console.log(encryptedBytes, sm4.decrypt(encryptedBytes, key,{output:'array'})) - return new Uint8Array(encryptedBytes) +const SM4 = { + encrypt: async (key, data) => { + const encryptedBytes = await new Promise((resolve) => { + const sm4Worker = new sm4_encrypt_worker() + sm4Worker.onmessage = (event) => { + resolve(event.data) + } + sm4Worker.postMessage({ data, key }) + }) + return encryptedBytes + }, + decrypt: async (key, data) => { + const encryptedBytes = await new Promise((resolve) => { + const sm4Worker = new sm4_encrypt_worker() + sm4Worker.onmessage = (event) => { + resolve(event.data) + } + sm4Worker.postMessage({ data, key }) + }) + return encryptedBytes + } } + +export default SM4 \ No newline at end of file diff --git a/src/func/download.js b/src/func/download.js index 40c9a55..b2abca4 100644 --- a/src/func/download.js +++ b/src/func/download.js @@ -2,6 +2,8 @@ import aesjs from "aes-js"; import { Base64 } from "js-base64"; import { saveAs } from "file-saver"; import { sm4 } from "sm-crypto"; +import AES from './AES' +import SM4 from './SM4' const blob2Uint8Array = function (blob) { return new Promise((resolve, reject) => { @@ -19,7 +21,7 @@ const blob2Uint8Array = function (blob) { }; const decrypt = (key, data) => { key = key.trim() - return blob2Uint8Array(data).then(data => { + return blob2Uint8Array(data).then(async data => { // 无加密 if (key.length === 0) { return data; @@ -28,14 +30,17 @@ const decrypt = (key, data) => { if (key.length === 19) { key = [...aesjs.utils.utf8.toBytes(key.substring(3))]; // console.log([...data]) - var decryptedBytes = new Uint8Array(sm4.decrypt([...data], key, { output: "array" })); + // var decryptedBytes = new Uint8Array(sm4.decrypt([...data], key, { output: "array" })); + let decryptedBytes = await SM4.decrypt(key, data) return decryptedBytes; } else { // AES - key = aesjs.utils.utf8.toBytes(key); - var aesCtr = new aesjs.ModeOfOperation.ctr(key, new aesjs.Counter(5)); - var decryptedBytes = aesCtr.decrypt(data); - return decryptedBytes; + // key = aesjs.utils.utf8.toBytes(key); + // var aesCtr = new aesjs.ModeOfOperation.ctr(key, new aesjs.Counter(5)); + // var decryptedBytes = aesCtr.decrypt(data); + // return decryptedBytes; + const decryptedBytes = await AES(key, data) + return decryptedBytes } }); }; diff --git a/src/func/upload.js b/src/func/upload.js index a02f594..93dfe71 100644 --- a/src/func/upload.js +++ b/src/func/upload.js @@ -96,9 +96,10 @@ const encrypt = (key, data, fileName, setting, message) => { } else { if (message) message.info(`开始加密${fileName}`) key = [...aesjs.utils.utf8.toBytes(key.substring(3))] - encrypted_data = await SM4(key, data) + encrypted_data = await SM4.encrypt(key, data) if (message) message.info(`${fileName}加密完成`) } + console.log(encrypted_data) return encrypted_data }) } diff --git a/src/worker/aes_ctr.js b/src/worker/aes_ctr.js index 13580b0..222402a 100644 --- a/src/worker/aes_ctr.js +++ b/src/worker/aes_ctr.js @@ -3,7 +3,7 @@ import aesjs from 'aes-js' self.onmessage = async function (event) { const data = event.data.data const key = event.data.key - var aesCtr = new aesjs.ModeOfOperation.ctr(key, new aesjs.Counter(0)) + var aesCtr = new aesjs.ModeOfOperation.ctr(key, new aesjs.Counter(7058)) const encryptData = aesCtr.encrypt(data) self.postMessage(encryptData) } diff --git a/src/worker/sm4_decrypt.js b/src/worker/sm4_decrypt.js new file mode 100644 index 0000000..2b25777 --- /dev/null +++ b/src/worker/sm4_decrypt.js @@ -0,0 +1,9 @@ +import { sm4 } from 'sm-crypto' + +self.onmessage = async function (event) { + const data = event.data.data + const key = event.data.key + self.postMessage( + new Uint8Array(sm4.decrypt([...data], key, { output: 'array' })) + ) +} diff --git a/src/worker/sm4.js b/src/worker/sm4_encrypt.js similarity index 83% rename from src/worker/sm4.js rename to src/worker/sm4_encrypt.js index 37283d3..98a2a66 100644 --- a/src/worker/sm4.js +++ b/src/worker/sm4_encrypt.js @@ -7,5 +7,5 @@ self.onmessage = async function (event) { padding: 'pkcs#7', output: 'array' }) - self.postMessage(encryptData) + self.postMessage(new Uint8Array(encryptData)) }