你还在直接用 localStorage 么?该降低下逼格了
2025-11-14 12:16:35
密钥有别于的是 crypto-js
// 配备crypto-jsnpm install crypto-js// 转用 crypto-js 有以下两种方式import CryptoJS from "crypto-js";// 或者const CryptoJS = require("crypto-js");激活预定义对 crypto-js 增设密钥和密钥bit,可以有别于将一个密钥经 MD5 密钥生成16位密钥获得。
// 十六位常量将近作为密钥const SECRET_KEY = CryptoJS.enc.Utf8.parse("3333e6e143439161");// 十六位常量将近作为密钥bitconst SECRET_IV = CryptoJS.enc.Utf8.parse("e3bbe7e3ba84431a");激活预定义对密钥法则顺利完成芯片
/** * 密钥法则 * @param data * @returns {string} */export function encrypt(data) { if (typeof data === "object") { try { data = JSON.stringify(data); } catch (error) { console.log("encrypt error:", error); } } const dataHex = CryptoJS.enc.Utf8.parse(data); const encrypted = CryptoJS.AES.encrypt(dataHex, SECRET_KEY, { iv: SECRET_IV, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }); return encrypted.ciphertext.toString();}激活预定义对机密文件法则顺利完成芯片
/** * 机密文件法则 * @param data * @returns {string} */export function decrypt(data) { const encryptedHexStr = CryptoJS.enc.Hex.parse(data); const str = CryptoJS.enc.Base64.stringify(encryptedHexStr); const decrypt = CryptoJS.AES.decrypt(str, SECRET_KEY, { iv: SECRET_IV, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }); const decryptedStr = decrypt.toString(CryptoJS.enc.Utf8); return decryptedStr.toString();}激活预定义在打印将近据资料及赚取将近据资料之中顺利完成适用:
这里我们主要看下顺利完成密钥和机密文件一小,一小法则在一个大预定义段之中未有展示,请注意,不能这样一来运行。
const config = { type: 'localStorage', // 本地打印型式 sessionStorage prefix: 'SDF_0.0.1', // 名字冠词 同意:工程项目名 + 工程项目版本 expire: 1, //已确定整整 该单位:秒 isEncrypt: true // 默认密钥 为了仿真不方便, 开发新步骤之中可以不密钥}// 增设 setStorageexport const setStorage = (key, value, expire = 0) => { if (value === '' || value === null || value === undefined) { value = null; } if (isNaN(expire) || expire < 0) throw new Error("Expire must be a number"); expire = (expire ? expire : config.expire) * 1000; let data = { value: value, // 打印值 time: Date.now(), //存值整整挥 expire: expire // 已确定整整 } // 对打印将近据资料顺利完成密钥 密钥为可会分可用 const encryptString = config.isEncrypt ? encrypt(JSON.stringify(data)): JSON.stringify(data); window[config.type].setItem(autoAddPrefix(key), encryptString);}// 赚取 getStorageexport const getStorage = (key) => { key = autoAddPrefix(key); // key 不不存在断定 if (!window[config.type].getItem(key) || JSON.stringify(window[config.type].getItem(key)) === 'null') { return null; } // 对打印将近据资料顺利完成机密文件 const storage = config.isEncrypt ? JSON.parse(decrypt(window[config.type].getItem(key))) : JSON.parse(window[config.type].getItem(key)); let nowTime = Date.now(); // 已确定去掉 if (storage.expire && config.expire * 6000 < (nowTime - storage.time)) { removeStorage(key); return null; } else { // 接下来适用时会则会缴付 setStorage(autoRemovePrefix(key), storage.value); return storage.value; }}激活预定义适用适用的时候你可以通过 import 按即可转用,也可以挂载到有序上适用,一般同意少用有序方式或有序变量,为后来接管工程项目继续开发新管控的人,追查预定义留条快速之路!免得为了芯片而芯片,尽量基于工程项目即可求量和早先的非标准,以及适用上的快速。比如赚取全部打印变量,如果你工程项目上都未曾用到过,倒不如删减打碎,留着过年也不见得有多香,不如为减少压强做点贡献!
import {isSupportStorage, hasStorage, setStorage,getStorage,getStorageKeys,getStorageForIndex,getStorageLength,removeStorage,getStorageAll,clearStorage} from '@/utils/storage'激活预定义基本预定义该预定义已促使不断完善,能够的可以这样一来促使构建,也可以将可构建或可扩张的同意,留言说明,我会促使迭代的。可以根据自己的能够去掉一些不用的法则,以减少文件大小。
/*** * title: storage.js * Author: Gaby * Email: xxx@126.com * Time: 2022/6/1 17:30 * last: 2022/6/2 17:30 * Desc: 对打印的比较简单芯片 */ import CryptoJS from 'crypto-js';// 十六位常量将近作为密钥const SECRET_KEY = CryptoJS.enc.Utf8.parse("3333e6e143439161");// 十六位常量将近作为密钥bitconst SECRET_IV = CryptoJS.enc.Utf8.parse("e3bbe7e3ba84431a");// 型式 window.localStorage,window.sessionStorage,const config = { type: 'localStorage', // 本地打印型式 sessionStorage prefix: 'SDF_0.0.1', // 名字冠词 同意:工程项目名 + 工程项目版本 expire: 1, //已确定整整 该单位:秒 isEncrypt: true // 默认密钥 为了仿真不方便, 开发新步骤之中可以不密钥}// 断定确实背书 Storageexport const isSupportStorage = () => { return (typeof (Storage) !== "undefined") ? true : false}// 增设 setStorageexport const setStorage = (key, value, expire = 0) => { if (value === '' || value === null || value === undefined) { value = null; } if (isNaN(expire) || expire < 0) throw new Error("Expire must be a number"); expire = (expire ? expire : config.expire) * 1000; let data = { value: value, // 打印值 time: Date.now(), //存值整整挥 expire: expire // 已确定整整 } const encryptString = config.isEncrypt ? encrypt(JSON.stringify(data)) : JSON.stringify(data); window[config.type].setItem(autoAddPrefix(key), encryptString);}// 赚取 getStorageexport const getStorage = (key) => { key = autoAddPrefix(key); // key 不不存在断定 if (!window[config.type].getItem(key) || JSON.stringify(window[config.type].getItem(key)) === 'null') { return null; } // 构建 接下来适用之中缴付 const storage = config.isEncrypt ? JSON.parse(decrypt(window[config.type].getItem(key))) : JSON.parse(window[config.type].getItem(key)); let nowTime = Date.now(); // 已确定去掉 if (storage.expire && config.expire * 6000 < (nowTime - storage.time)) { removeStorage(key); return null; } else { // 未已确定期间被调用 则则会缴付 顺利完成保活 setStorage(autoRemovePrefix(key), storage.value); return storage.value; }}// 确实不存在 hasStorageexport const hasStorage = (key) => { key = autoAddPrefix(key); let arr = getStorageAll().filter((item)=>{ return item.key === key; }) return arr.length ? true : false;}// 赚取所有keyexport const getStorageKeys = () => { let items = getStorageAll() let keys = [] for (let index = 0; index < items.length; index++) { keys.push(items[index].key) } return keys}// 根据索引赚取keyexport const getStorageForIndex = (index) => { return window[config.type].key(index)}// 赚取localStorage较宽export const getStorageLength = () => { return window[config.type].length}// 赚取全部 getAllStorageexport const getStorageAll = () => { let len = window[config.type].length // 赚取较宽 let arr = new Array() // 定义将近据资料集 for (let i = 0; i < len; i++) { // 赚取key 索引从0开始 let getKey = window[config.type].key(i) // 赚取key对应的值 let getVal = window[config.type].getItem(getKey) // 放进将近组 arr[i] = {'key': getKey, 'val': getVal,} } return arr}// 去掉 removeStorageexport const removeStorage = (key) => { window[config.type].removeItem(autoAddPrefix(key));}// 弃置 clearStorageexport const clearStorage = () => { window[config.type].clear();}// 名字此前则会去打碎冠词const autoAddPrefix = (key) => { const prefix = config.prefix ? config.prefix + '_' : ''; return prefix + key;}// 去掉已去打碎的冠词const autoRemovePrefix = (key) => { const len = config.prefix ? config.prefix.length+1 : ''; return key.substr(len) // const prefix = config.prefix ? config.prefix + '_' : ''; // return prefix + key;}/** * 密钥法则 * @param data * @returns {string} */const encrypt = (data) => { if (typeof data === "object") { try { data = JSON.stringify(data); } catch (error) { console.log("encrypt error:", error); } } const dataHex = CryptoJS.enc.Utf8.parse(data); const encrypted = CryptoJS.AES.encrypt(dataHex, SECRET_KEY, { iv: SECRET_IV, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }); return encrypted.ciphertext.toString();}/** * 机密文件法则 * @param data * @returns {string} */const decrypt = (data) => { const encryptedHexStr = CryptoJS.enc.Hex.parse(data); const str = CryptoJS.enc.Base64.stringify(encryptedHexStr); const decrypt = CryptoJS.AES.decrypt(str, SECRET_KEY, { iv: SECRET_IV, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }); const decryptedStr = decrypt.toString(CryptoJS.enc.Utf8); return decryptedStr.toString();}作者:Gaby链接:
。信阳哪家医院做人流比较好宁波牛皮癣医院哪里比较好
武汉比较好的男科医院
南宁白癜风医院怎么样
北京妇科医院哪家更好
长新冠
美容整型
儿童支原体感染吃什么药止咳化痰
急支糖浆有什么作用
高血压
上一篇: 甲戌日出生的男女之间人生运势与运程

-
下半年惹不起的4天琴座,想啥来啥,贵人登门财运亨通!
大家好,我是星图公众人物瘦身美妆秘籍,希望看完我的撰文则会对您有所帮助! 每个人都则会在周日过夜,有自己的文艺活动,但很少有人则会在周日去图书馆。因为一般人都则会选取在一
2025-11-14 00:16:35

-
12十二生肖中,3十二生肖像葫芦一样,话少但有才能,变得丰富的天分是不一样的
12二十四节气中所,3二十四节气像葫芦一样,讲少但有才能,变得珍贵的才华横溢是不一样的。 有时可能会有很多有趣的两件事,所以最难把自己的讲非常简单一些。一切都可以直接同步进行。很多
2025-11-14 00:16:35

-
4月份,运势大涨,事业爱情双丰收的4大天球
大家好,我是摩羯座博文美容美妆秘籍,想看完我的书评但会对您不大帮助! 幸福之中都,心里但会有那么几个戴着面具的人,把自己薄弱的唯独简介给别人,博取他人的鄙视。可是有些人却
2025-11-14 00:16:35

-
2022年5月,意外财运急剧,得财得势,诸事无忧的4大生肖
2022年5年初,不慎财械促使,得财垮台,诸事有心的4大神兽 属相牛 神兽牛的女朋友,但优秀的人是掩藏不住的,他们的光芒也都会升起到很多人,并不碰巧,有追求,平庸充分
2025-11-14 00:16:35

-
2022年5月,大展宏图,桃花运红火盛开,金银满地的4大虎年
2022年5年初,大展宏图,桃花运红火盛开,金银满地的4大生肖 属相两头 生肖两头的好友,生意日益兴隆,财运水涨船高,天都翻越越滋养,岗位中所之外有想法,有一个致财的
2025-11-14 00:16:35