拆分部分文件

This commit is contained in:
539943419 committed 2024-03-21 20:37:10 +08:00
1 parent d5cb96d713
commit 08e7820f37
12 files changed
+448 -210

No files matched your search

+78 -79
View File
@@ -28,11 +28,8 @@
<script setup>
import { ref, onMounted } from "vue";
import aesjs from "aes-js";
import { Base64 } from "js-base64";
import { saveAs } from "file-saver";
import { useSettingStore } from "@/pinia/store";
import { sm4 } from "sm-crypto";
import {decrypt, decryptString, downloadFromUint8Array} from '../func/download'
import {NInput,NFlex,NDataTable,NButton} from 'naive-ui'
var downloadFileID = ref();
@@ -46,83 +43,85 @@ var baseUrl =
location.protocol + "//" + location.hostname + ":" + serverPort + "/";
// console.log(baseUrl);
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 decrypt = (key, data) => {
return blob2Uint8Array(data).then(data => {
// 无加密
if(key.length === 0){
return data
}
// SM4
if (key.length >= 34) {
key = key.substring(3);
// console.log([...data])
var decryptedBytes = new Uint8Array(
sm4.decrypt([...data], key, { output: "array" })
);
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;
}
});
};
const decryptString = (key, str) => {
// 无加密
if(key.length === 0){
return sm4.decrypt(str, 'miaospringmiaospringmiaospringao');
}
// SM4
// console.log(key,key.length)
if (key.length >= 34) {
key = key.substring(3);
return sm4.decrypt(str, key);
}
// AES
var data = new Uint8Array(
Base64.decode(str)
.split(",")
.map(n => parseInt(n))
);
key = aesjs.utils.utf8.toBytes(key);
var aesCtr = new aesjs.ModeOfOperation.ctr(key, new aesjs.Counter(5));
var decryptedBytes = aesCtr.decrypt(data);
var decryptedStr = aesjs.utils.utf8.fromBytes(decryptedBytes);
return decryptedStr;
};
// 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 decrypt = (key, data) => {
// return blob2Uint8Array(data).then(data => {
// // 无加密
// if(key.length === 0){
// return data
// }
// // SM4
// if (key.length >= 34) {
// key = key.substring(3);
// // console.log([...data])
// var decryptedBytes = new Uint8Array(
// sm4.decrypt([...data], key, { output: "array" })
// );
// 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;
// }
// });
// };
// const decryptString = (key, str) => {
// // 无加密
// if(key.length === 0){
// return sm4.decrypt(str, 'miaospringmiaospringmiaospringao');
// }
// // SM4
// // console.log(key,key.length)
// if (key.length >= 34) {
// key = key.substring(3);
// return sm4.decrypt(str, key);
// }
// // AES
// var data = new Uint8Array(
// Base64.decode(str)
// .split(",")
// .map(n => parseInt(n))
// );
// key = aesjs.utils.utf8.toBytes(key);
// var aesCtr = new aesjs.ModeOfOperation.ctr(key, new aesjs.Counter(5));
// var decryptedBytes = aesCtr.decrypt(data);
// var decryptedStr = aesjs.utils.utf8.fromBytes(decryptedBytes);
// return decryptedStr;
// };
// const downloadFromUint8Array = (data, fileName) => {
// let uint8Array = data;
// let blob = new Blob([uint8Array], { type: "text/plain" });
// // 使用file-saver.js
// saveAs(blob, fileName);
// //let url = URL.createObjectURL(blob);
// //let a = document.createElement("a");
// //a.href = url;
// //a.download = fileName;
// //a.click();
// //URL.revokeObjectURL(url);
// };
const downloadFromUint8Array = (data, fileName) => {
let uint8Array = data;
let blob = new Blob([uint8Array], { type: "text/plain" });
// 使用file-saver.js
saveAs(blob, fileName);
//let url = URL.createObjectURL(blob);
//let a = document.createElement("a");
//a.href = url;
//a.download = fileName;
//a.click();
//URL.revokeObjectURL(url);
};
// 刷新展示的下载进度
const updateDownloadQuene = (code, key, value) => {
for (let index in downloadQuene.value) {
+91 -94
View File
@@ -37,52 +37,50 @@
<script setup>
import { ref, onMounted } from "vue";
import aesjs from "aes-js";
import { Base64 } from "js-base64";
// import aesjs from "aes-js";
// import { Base64 } from "js-base64";
import { useMessage, useNotification } from "naive-ui";
import useClipboard from "vue-clipboard3";
import { useSettingStore } from "@/pinia/store";
import { sm4 } from 'sm-crypto'
// import { sm4 } from 'sm-crypto'
import {NUpload,NUploadDragger,NText,NP,NFlex,NDataTable,NButton,NInputNumber} from 'naive-ui'
import {encrypt,encryptString,generateKey} from '../func/upload'
const setting = useSettingStore();
const { toClipboard } = useClipboard();
const message = useMessage();
const notification = useNotification();
// 目前使用加密
const activeFuction = setting.activeFuction;
// 启用的密钥组成
const activeKeyButtons = setting.activeKeyMap;
// 服务端端口
const serverPort = setting.serverPort;
// console.log(activeFuction,activeKeyButtons)
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'
}
}
// 生成密钥
const generateKey = function() {
if(setting.activeFuction === "不加密"){
return ''
}
var returnStr = "",
length = setting.activeFuction === "AES128" ? 16 : 32
// charMap = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
// 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'
// }
// }
// // 生成密钥
// const generateKey = function() {
// if(setting.activeFuction === "不加密"){
// return ''
// }
// var returnStr = "",
// length = setting.activeFuction === "AES128" ? 16 : 32
// // charMap = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
for (var i = 0; i < length; i++) {
var index = Math.round(Math.random() * charMap.length);
returnStr += charMap.substring(index, index + 1);
}
return returnStr;
};
// for (var i = 0; i < length; i++) {
// var index = Math.round(Math.random() * charMap.length);
// returnStr += charMap.substring(index, index + 1);
// }
// return returnStr;
// };
// 上传文件用
const uploadRef = ref(null);
@@ -99,69 +97,68 @@ const baseUrl =
location.protocol + "//" + location.hostname + ":" + serverPort + "/";
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);
};
});
};
// 包含AES128和AES256
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) => {
return blob2Uint8Array(data).then(data => {
let encrypted_data = null
if(setting.activeFuction === "不加密"){
encrypted_data = data
}else if(setting.activeFuction != "SM4"){
message.info(`开始加密${fileName}`);
encrypted_data = AES(key,data)
message.info(`${fileName}加密完成`);
}else{
message.info(`开始加密${fileName}`);
encrypted_data = SM4(key,data)
message.info(`${fileName}加密完成`);
}
return encrypted_data
});
};
const encryptString = (key, str) => {
// console.log(key)
if(setting.activeFuction === "不加密"){
return sm4.encrypt(str, 'miaospringmiaospringmiaospringao')
}else if(setting.activeFuction !== "SM4"){
key = aesjs.utils.utf8.toBytes(key);
var data = aesjs.utils.utf8.toBytes(str);
var aesCtr = new aesjs.ModeOfOperation.ctr(key, new aesjs.Counter(5));
var encryptedBytes = aesCtr.encrypt(data);
return Base64.encode(encryptedBytes);
}else{
return sm4.encrypt(str, key)
}
};
// 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);
// };
// });
// };
// // 包含AES128和AES256
// 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) => {
// return blob2Uint8Array(data).then(data => {
// let encrypted_data = null
// if(setting.activeFuction === "不加密"){
// encrypted_data = data
// }else if(setting.activeFuction != "SM4"){
// message.info(`开始加密${fileName}`);
// encrypted_data = AES(key,data)
// message.info(`${fileName}加密完成`);
// }else{
// message.info(`开始加密${fileName}`);
// encrypted_data = SM4(key,data)
// message.info(`${fileName}加密完成`);
// }
// return encrypted_data
// });
// };
// const encryptString = (key, str) => {
// // console.log(key)
// if(setting.activeFuction === "不加密"){
// return sm4.encrypt(str, 'miaospringmiaospringmiaospringao')
// }else if(setting.activeFuction !== "SM4"){
// key = aesjs.utils.utf8.toBytes(key);
// var data = aesjs.utils.utf8.toBytes(str);
// var aesCtr = new aesjs.ModeOfOperation.ctr(key, new aesjs.Counter(5));
// var encryptedBytes = aesCtr.encrypt(data);
// return Base64.encode(encryptedBytes);
// }else{
// return sm4.encrypt(str, key)
// }
// };
const clickUpload = function(){
// for(let i of uploadRef.value)console.log(i)
// console.log(uploadRef.value)
message.info(`开始上传`);
uploadRef.value.submit();
}
@@ -184,13 +181,13 @@ const customRequest = ({
onError,
onProgress
}) => {
// console.log(file);
file = file.file;
var fileName = file.name;
const key = generateKey();
const encryptedFileName = encryptString(key, fileName);
const key = generateKey(setting);
const encryptedFileName = encryptString(key, fileName, setting);
var f = new Blob([file]);
encrypt(key, f, fileName).then(data => {
encrypt(key, f, fileName, setting, message).then(data => {
message.info(`开始上传${fileName}`);
const params = {
fileName: encryptedFileName,
downloadCredit:downloadCredit.value == null ? -1 : downloadCredit.value
+79
View File
@@ -0,0 +1,79 @@
import aesjs from "aes-js";
import { Base64 } from "js-base64";
import { saveAs } from "file-saver";
import { sm4 } from "sm-crypto";
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 decrypt = (key, data) => {
return blob2Uint8Array(data).then(data => {
// 无加密
if (key.length === 0) {
return data;
}
// SM4
if (key.length >= 34) {
key = key.substring(3);
// console.log([...data])
var decryptedBytes = new Uint8Array(sm4.decrypt([...data], key, { output: "array" }));
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;
}
});
};
const decryptString = (key, str) => {
// 无加密
if (key.length === 0) {
return sm4.decrypt(str, "miaospringmiaospringmiaospringao");
}
// SM4
// console.log(key,key.length)
if (key.length >= 34) {
key = key.substring(3);
return sm4.decrypt(str, key);
}
// AES
var data = new Uint8Array(
Base64.decode(str)
.split(",")
.map(n => parseInt(n))
);
key = aesjs.utils.utf8.toBytes(key);
var aesCtr = new aesjs.ModeOfOperation.ctr(key, new aesjs.Counter(5));
var decryptedBytes = aesCtr.decrypt(data);
var decryptedStr = aesjs.utils.utf8.fromBytes(decryptedBytes);
return decryptedStr;
};
const downloadFromUint8Array = (data, fileName) => {
let uint8Array = data;
let blob = new Blob([uint8Array], { type: "text/plain" });
// 使用file-saver.js
saveAs(blob, fileName);
//let url = URL.createObjectURL(blob);
//let a = document.createElement("a");
//a.href = url;
//a.download = fileName;
//a.click();
//URL.revokeObjectURL(url);
};
export { blob2Uint8Array, decrypt, decryptString, downloadFromUint8Array };
+93
View File
@@ -0,0 +1,93 @@
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 === "AES128" ? 16 : 32
// charMap = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
for (var i = 0; i < length; i++) {
var index = Math.round(Math.random() * charMap.length);
returnStr += charMap.substring(index, index + 1);
}
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) => {
return blob2Uint8Array(data).then(data => {
let encrypted_data = null
if(setting.activeFuction === "不加密"){
encrypted_data = data
}else if(setting.activeFuction != "SM4"){
message.info(`开始加密${fileName}`);
encrypted_data = AES(key,data)
message.info(`${fileName}加密完成`);
}else{
message.info(`开始加密${fileName}`);
encrypted_data = SM4(key,data)
message.info(`${fileName}加密完成`);
}
return encrypted_data
});
};
// setting为pinia存储的setting。。。
const encryptString = (key, str, setting) => {
// console.log(key)
if(setting.activeFuction === "不加密"){
return sm4.encrypt(str, 'miaospringmiaospringmiaospringao')
}else if(setting.activeFuction !== "SM4"){
key = aesjs.utils.utf8.toBytes(key);
var data = aesjs.utils.utf8.toBytes(str);
var aesCtr = new aesjs.ModeOfOperation.ctr(key, new aesjs.Counter(5));
var encryptedBytes = aesCtr.encrypt(data);
return Base64.encode(encryptedBytes);
}else{
return sm4.encrypt(str, key)
}
};
export {encrypt,encryptString,generateKey}
+2 -1
View File
@@ -1,4 +1,5 @@
import { defineStore } from "pinia";
import config from "../../miaoShareConfig.json"
var activeFuctionLocal = localStorage.getItem('activeFuction')
@@ -17,7 +18,7 @@ export const useSettingStore = defineStore("setting", {
state: () => ({
activeFuction: activeFuctionLocal,
activeKeyMap:JSON.parse(activeKeyMap),
serverPort:"17058"
serverPort:config.PORT
}),
getters: {
// double: state => state.count * 2