From f369e59f6fa62b75ba1b67c36c3d16aefdaa7428 Mon Sep 17 00:00:00 2001 From: Jesse-Ma <24167796@qq.com> Date: Thu, 30 Mar 2023 10:19:18 +0800 Subject: [PATCH] hex plus --- src/api/note.js | 9 +++-- src/libs/secret.js | 87 +++++++++++++++++++++++++++++------------- src/views/ViewNote.vue | 14 ++++--- 3 files changed, 75 insertions(+), 35 deletions(-) diff --git a/src/api/note.js b/src/api/note.js index a5ff743..70f1fef 100644 --- a/src/api/note.js +++ b/src/api/note.js @@ -1,7 +1,7 @@ import axios from "axios"; import { getStoreKey } from "@/api/lock"; import storage from "@/libs/storage"; -import { md5, wrap} from "@/libs/secret"; +import { md5, wrap,convertBase64ToHexString,convertHexStringToUint8Array} from "@/libs/secret"; import NoteConstant from "@/libs/constants"; axios.interceptors.response.use(undefined, (err) => { @@ -51,8 +51,11 @@ export function saveNote(noteForm, secret) { // let bufferArrary = eval("[" + note.text + "]"); // let array = Uint8Array.from(bufferArrary); - let encoder = new TextEncoder() - let array = encoder.encode(note.text) + // let encoder = new TextEncoder() + // let array = encoder.encode(note.text) + + let hexString = convertBase64ToHexString(note.text) + let array = convertHexStringToUint8Array(hexString) let blob = new Blob([array], { type: "application/octet-stream" }); let form = new FormData(); diff --git a/src/libs/secret.js b/src/libs/secret.js index 51581b0..3ad923a 100644 --- a/src/libs/secret.js +++ b/src/libs/secret.js @@ -4,6 +4,41 @@ import pako from "pako"; 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 要加密的内容 * @keyWord String 服务器随机返回的关键字 @@ -92,35 +127,33 @@ export function unzip(data){ return pako.ungzip(data); } + +export function convertBase64ToHexString(base64) { + return CryptoJS.enc.Hex.stringify(CryptoJS.enc.Base64.parse(base64)); +} + +export function convertHexStringToBase64(hexString) { + return CryptoJS.enc.Base64.stringify(CryptoJS.enc.Hex.parse(hexString)); +} + +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); +} +export function convertUint8ArrayToHexString(byteArray) { + return Array.prototype.map.call(byteArray, function(byte) { + return ('0' + (byte & 0xFF).toString(16)).slice(-2); + }).join(''); +} + function convertWordArrayToUint8Array(wordArray) { - var len = wordArray.words.length, - u8_array = new Uint8Array(len << 2), - offset = 0, word, i - ; - for (i=0; i> 24; - u8_array[offset++] = (word >> 16) & 0xff; - u8_array[offset++] = (word >> 8) & 0xff; - u8_array[offset++] = word & 0xff; - } - return u8_array; + return CryptoJS.enc.Uint8Array.stringify(wordArray); } function convertUint8ArrayToWordArray(u8Array) { - var words = [], i = 0, len = u8Array.length; - - while (i < len) { - words.push( - (u8Array[i++] << 24) | - (u8Array[i++] << 16) | - (u8Array[i++] << 8) | - (u8Array[i++]) - ); - } - - return { - sigBytes: words.length * 4, - words: words - }; + return CryptoJS.enc.Uint8Array.parse(u8Array); } + diff --git a/src/views/ViewNote.vue b/src/views/ViewNote.vue index 4185a4a..6660f29 100644 --- a/src/views/ViewNote.vue +++ b/src/views/ViewNote.vue @@ -336,7 +336,7 @@