import aesjs from "aes-js"; import { Base64 } from "js-base64"; import { sm4 } from 'sm-crypto' // const setting = useSettingStore(); // const message = useMessage(); // 生成密钥 const generateKey = function(setting) { if(setting.activeFuction === "不加密"){ return '' } var charMap = "" for(let i of setting.activeKeyMap){ if(i === 'A-Z'){ charMap = charMap + 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' }else if(i === "a-z"){ charMap = charMap + 'abcdefghijklmnopqrstuvwxyz' }else if(i === '0-9'){ charMap = charMap + '0123456789' } } var returnStr = "", length = setting.activeFuction !== "AES256" ? 16 : 32 // charMap = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; for (var i = 0; i < length; i++) { var index = parseInt(Math.random() * charMap.length); returnStr += charMap.substring(index, index + 1); } if(setting.activeFuction === "SM4"){ returnStr = 'SM4' + returnStr } // console.log(returnStr,returnStr.length) return returnStr; }; const blob2Uint8Array = function(blob) { return new Promise((resolve, reject) => { let reader = new FileReader(); reader.readAsArrayBuffer(blob); reader.onload = function() { let buffer = reader.result; let uint8array = new Uint8Array(buffer); resolve(uint8array); }; reader.onerror = function() { reject(reader.error); }; }); }; const AES = (key,data)=>{ key = aesjs.utils.utf8.toBytes(key); var aesCtr = new aesjs.ModeOfOperation.ctr(key, new aesjs.Counter(5)); var encryptedBytes = aesCtr.encrypt(data); return encryptedBytes; } const SM4 = (key,data)=>{ // console.log(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 encrypt = (key, data, fileName, setting, message) => { // if(!encryptFunction){ // encryptFunction = setting.activeFuction // } let encryptFunction = {0:'不加密',16:'AES128',19:'SM4',32:'AES256'}[key.length] return blob2Uint8Array(data).then(data => { let encrypted_data = null if(encryptFunction === "不加密"|| key === ''){ encrypted_data = data // AES }else if(encryptFunction != "SM4"){ message.info(`开始加密${fileName}`); encrypted_data = AES(key,data) message.info(`${fileName}加密完成`); // SM4 }else{ message.info(`开始加密${fileName}`); key = [...aesjs.utils.utf8.toBytes(key.substring(3))]; encrypted_data = SM4(key,data) message.info(`${fileName}加密完成`); } return encrypted_data }); }; // setting为pinia存储的setting。。。 const encryptString = (key, str, setting) => { // if(!encryptFunction){ // encryptFunction = setting.activeFuction // } // console.log(key,key.length) let encryptFunction = {0:'不加密',16:'AES128',19:'SM4',32:'AES256'}[key.length] if(encryptFunction === "不加密" || key === ''){ // return sm4.encrypt(str, 'miaospringmiaospringmiaospringao') return Base64.encode(str) }else if(encryptFunction !== "SM4"){ key = aesjs.utils.utf8.toBytes(key); // var data = aesjs.utils.utf8.toBytes(str); var data = new TextEncoder().encode(str) var aesCtr = new aesjs.ModeOfOperation.ctr(key, new aesjs.Counter(5)); var encryptedBytes = aesCtr.encrypt(data); var res = Base64.fromUint8Array(encryptedBytes,true); // console.log(encryptedBytes,res) return res; }else{ key = [...aesjs.utils.utf8.toBytes(key.substring(3))]; // console.log(key) return sm4.encrypt(str, key) } }; export {encrypt,encryptString,generateKey}