This commit is contained in:
Jesse-Ma
2023-03-29 20:39:29 +08:00
parent 0de98e660b
commit 9f1a0b75e3
3 changed files with 110 additions and 43 deletions

View File

@@ -1,7 +1,7 @@
import axios from "axios"; import axios from "axios";
import { getStoreKey } from "@/api/lock"; import { getStoreKey } from "@/api/lock";
import storage from "@/libs/storage"; import storage from "@/libs/storage";
import { md5, wrap} from "@/libs/secret"; import { md5, wrap, convertHexStringToUint8Array} from "@/libs/secret";
import NoteConstant from "@/libs/constants"; import NoteConstant from "@/libs/constants";
axios.interceptors.response.use(undefined, (err) => { axios.interceptors.response.use(undefined, (err) => {
@@ -51,8 +51,9 @@ export function saveNote(noteForm, secret) {
// let bufferArrary = eval("[" + note.text + "]"); // let bufferArrary = eval("[" + note.text + "]");
// let array = Uint8Array.from(bufferArrary); // let array = Uint8Array.from(bufferArrary);
let encoder = new TextEncoder() // let encoder = new TextEncoder()
let array = encoder.encode(note.text) // let array = encoder.encode(note.text)
let array = convertHexStringToUint8Array(note.text)
let blob = new Blob([array], { type: "application/octet-stream" }); let blob = new Blob([array], { type: "application/octet-stream" });
let form = new FormData(); let form = new FormData();

View File

@@ -4,6 +4,43 @@ import pako from "pako";
const wasmFlate = window.wasm_bindgen; const wasmFlate = window.wasm_bindgen;
CryptoJS.enc.Uint8Array = {
/**
* WordArray转Uint8Array
* @param wordArray
* @returns {Uint8Array}
*/
stringify: function (wordArray) {
var len = wordArray.words.length,
u8_array = new Uint8Array(len << 2),
offset = 0, word, i;
for (i = 0; i < len; i++) {
word = wordArray.words[i];
u8_array[offset++] = word >> 24;
u8_array[offset++] = (word >> 16) & 0xff;
u8_array[offset++] = (word >> 8) & 0xff;
u8_array[offset++] = word & 0xff;
}
return u8_array;
},
/**
* Uint8Array转WordArray
* @param u8arr
* @returns {WordArray}
*/
parse: function (u8arr) {
var len = u8arr.length;
var words = [];
for (var i = 0; i < len; i++) {
words[i >>> 2] |= (u8arr[i] & 0xff) << (24 - (i % 4) * 8);
}
return CryptoJS.lib.WordArray.create(words, len);
}
};
/** /**
* @word 要加密的内容 * @word 要加密的内容
* @keyWord String 服务器随机返回的关键字 * @keyWord String 服务器随机返回的关键字
@@ -11,7 +48,7 @@ const wasmFlate = window.wasm_bindgen;
export function wrap(text, secretKey) { export function wrap(text, secretKey) {
text = "FLAGNOTE#" + text; text = "FLAGNOTE#" + text;
let ui8ary = noteZip(text); let ui8ary = noteZip(text);
let result = aesEncrypt(convertUint8ArrayToWordArray(ui8ary), secretKey); let result = aesEncrypt(convertUint8ArrayToWordArray(ui8ary), secretKey);
return result; return result;
} }
@@ -39,14 +76,16 @@ export function aesEncrypt(word, keyWord) {
mode: CryptoJS.mode.ECB, mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.ZeroPadding, padding: CryptoJS.pad.ZeroPadding,
}); });
return encrypted.toString(); return encrypted.ciphertext.toString();
} }
//解密 //解密
export function aesDecrypt(word, keyWord) { export function aesDecrypt(word, keyWord) {
let key = CryptoJS.enc.Utf8.parse(keyWord); let key = CryptoJS.enc.Utf8.parse(keyWord);
let decrypt = CryptoJS.AES.decrypt(word, key, { var srcs = CryptoJS.enc.Hex.parse(word);
let decrypt = CryptoJS.AES.decrypt({
ciphertext: srcs
}, key, {
mode: CryptoJS.mode.ECB, mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.ZeroPadding, padding: CryptoJS.pad.ZeroPadding,
}); });
@@ -76,16 +115,16 @@ export function noteZip(text) {
return text; return text;
} }
export function zip(data){ export function zip(data) {
if(wasmFlate.__wbindgen_wasm_module){ if (wasmFlate.__wbindgen_wasm_module) {
return wasmFlate.gzip_encode_raw(data); return wasmFlate.gzip_encode_raw(data);
} }
return pako.gzip(data); return pako.gzip(data);
} }
export function unzip(data){ export function unzip(data) {
if(wasmFlate.__wbindgen_wasm_module){ if (wasmFlate.__wbindgen_wasm_module) {
return wasmFlate.gzip_decode_raw(data); return wasmFlate.gzip_decode_raw(data);
} }
@@ -93,34 +132,60 @@ export function unzip(data){
} }
function convertWordArrayToUint8Array(wordArray) { function convertWordArrayToUint8Array(wordArray) {
var len = wordArray.words.length,
u8_array = new Uint8Array(len << 2), let rr = CryptoJS.enc.Uint8Array.stringify(wordArray);
offset = 0, word, i return rr;
; // console.log(rr)
for (i=0; i<len; i++) {
word = wordArray.words[i];
u8_array[offset++] = word >> 24; // var len = wordArray.words.length,
u8_array[offset++] = (word >> 16) & 0xff; // u8_array = new Uint8Array(len << 2),
u8_array[offset++] = (word >> 8) & 0xff; // offset = 0, word, i
u8_array[offset++] = word & 0xff; // ;
} // for (i = 0; i < len; i++) {
return u8_array; // word = wordArray.words[i];
// u8_array[offset++] = word >> 24;
// u8_array[offset++] = (word >> 16) & 0xff;
// u8_array[offset++] = (word >> 8) & 0xff;
// u8_array[offset++] = word & 0xff;
// }
// return u8_array;
} }
function convertUint8ArrayToWordArray(u8Array) { function convertUint8ArrayToWordArray(u8Array) {
var words = [], i = 0, len = u8Array.length;
let rr = CryptoJS.enc.Uint8Array.parse(u8Array);
while (i < len) { return rr;
words.push( // console.log(rr)
(u8Array[i++] << 24) |
(u8Array[i++] << 16) | // var words = [], i = 0, len = u8Array.length;
(u8Array[i++] << 8) |
(u8Array[i++]) // while (i < len) {
); // words.push(
} // (u8Array[i++] << 24) |
// (u8Array[i++] << 16) |
return { // (u8Array[i++] << 8) |
sigBytes: words.length * 4, // (u8Array[i++])
words: words // );
}; // }
// return {
// sigBytes: words.length * 4,
// words: words
// };
} }
export function convertHexStringToUint8Array(hexString) {
var result = [];
for (var i = 0; i < hexString.length; i += 2) {
result.push(parseInt(hexString.substr(i, 2), 16));
}
return Uint8Array.from(result);
// Uint8Array.from(hexString.match(/.{1,2}/g).map((byte) => parseInt(byte, 16)));
}
export function convertUint8ArrayToHexString(byteArray) {
return Array.prototype.map.call(byteArray, function(byte) {
return ('0' + (byte & 0xFF).toString(16)).slice(-2);
}).join('');
}

View File

@@ -336,7 +336,7 @@
<script> <script>
import { md5, unwrap } from "@/libs/secret"; import { md5, unwrap, convertUint8ArrayToHexString} from "@/libs/secret";
import { getStoreKey } from "@/api/lock"; import { getStoreKey } from "@/api/lock";
import { deleteNote, getNoteBlob } from "@/api/note"; import { deleteNote, getNoteBlob } from "@/api/note";
import storage from "@/libs/storage"; import storage from "@/libs/storage";
@@ -589,8 +589,9 @@ export default {
return; return;
} }
let decoder = new TextDecoder(); // let decoder = new TextDecoder();
let bytesString = decoder.decode(e.target.result); // let bytesString = decoder.decode(e.target.result);
let bytesString = convertUint8ArrayToHexString(new Uint8Array(e.target.result));
that.noteForm.text = unwrap(bytesString, that.secret.secretKey); that.noteForm.text = unwrap(bytesString, that.secret.secretKey);
//that.noteForm.escapeText = getEscapeText(that.noteForm.text); //that.noteForm.escapeText = getEscapeText(that.noteForm.text);