# its-storage **Repository Path**: its-wild/its-storage ## Basic Information - **Project Name**: its-storage - **Description**: its-storage 是一个参考 vue-ls 写的 javascript 插件,用于操作 Local Storage(本地存储)、Session Storage(会话存储),可以将存储到本地的值进行加密以提高信息安全性。 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 0 - **Created**: 2022-07-08 - **Last Updated**: 2023-01-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # its-storage ## 介绍 its-storage 是一个参考 vue-ls 写的 javascript 插件,用于操作 Local Storage(本地存储)、Session Storage(会话存储),可以将存储到本地的值进行加密以提高信息安全性。 ## 安装 **npm** ```bash npm install --save its-storage ``` **yarn** ```bash yarn add its-storage ``` ## 使用 ### 1. 基础 ```javascript import ItsStorage from 'its-storage' // 默认使用 localStorage const ls = ItsStorage.create() // 存 undefined ls.set('undefined', undefined) // 存 null ls.set('null', null) // 存数字 ls.set('number', 8) // 存字符串 ls.set('str', '这个一个字符串!') // 存对象 ls.set('obj', { user: '李四', id: 123 }) // 存数组 ls.set('arr', [1, 'string', { a: 2 }]) // 获取存的值 const undefinedVal = ls.get('undefined') const nullVal = ls.get('null') const numberVal = ls.get('number') const strVal = ls.get('str') const objVal = ls.get('obj') const arrVal = ls.get('arr') console.log(undefinedVal, nullVal, numberVal, strVal, objVal, arrVal) // 设置过期时间 ls.set('expireStr', '1秒后过期,1秒后再取就取不到了!', 1000) console.log(ls.get('expireStr')) // 输出:1秒后过期,1秒后再取就取不到了! setTimeout(() => { console.log(ls.get('expireStr')) // 输出:null }, 1500) // 获取不到值时设置默认值 const val = ls.get('nonExistent', '您要获取的值不存在,这个是默认值!') console.log(val) // 移除某一项 ls.remove('number') // 移除全部 ls.clear() ``` ### 2. 更多 #### 1. 开启加密功能 ```javascript // 自定义配置项时 storage 必传 const ls = ItsStorage.create({ // storage 为 local 或 session storage: 'local', namespace: 'its_', // 开启加密 encryption: true, }) // 加密后存储值为 X4yKmSzLNhmucLnwLE2EtTpmbH1AiSY9CFwON1rLQHLxWriSotMXGEgEDuAY17vRoqDLG6yIglmfZjoSJBELNrh8/5UzECW3y3uAmwnjC0C9BYo9OdGdxN//J1ybCsqvumo1AO1H1i21Tk3eqOCfWS5mU23/mDUOaO76Mm/VjSg= ls.set('encrypt', '这个加密后看不懂!') // 输出:这个加密后看不懂! console.log(ls.get('encrypt')) ``` **注意**:加密时要做大量运算,如果加密的数据过大,会出现加密卡顿现象,所以建议数据量不要太大。 #### 2. 使用自己的密钥加密 **注意:** 密钥长度位数为1024 ```javascript const publicKey = `-----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDfJUDWUj2+EAn2jjjXT5vvgPK+ gyKoJ05Ac9MXAq+zR8DbviThakouyMcYneHfBnjfg7Nr2oxzwhu+cFA0s1nFsdXx jl2lcyZvKh58brEMMFammXNp7sDb42En5oGl5girzHuf7yOAnAlji1WLOVj8kT0z hTwXcYrzAVu7tSkoiQIDAQAB -----END PUBLIC KEY-----` const privateKey = `-----BEGIN PRIVATE KEY----- MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAN8lQNZSPb4QCfaO ONdPm++A8r6DIqgnTkBz0xcCr7NHwNu+JOFqSi7Ixxid4d8GeN+Ds2vajHPCG75w UDSzWcWx1fGOXaVzJm8qHnxusQwwVqaZc2nuwNvjYSfmgaXmCKvMe5/vI4CcCWOL VYs5WPyRPTOFPBdxivMBW7u1KSiJAgMBAAECgYA5wce1cZX/kuExSwCVYkqnREYQ X5rh0UKk1hXmF9DoY4McnWuoWL2YvGkkCwGCm4c/uzP+j5PZBn3t3d40tdNfJ3eF WOEOXENdxhjNTBsptDwmqbSrhnzntB5ckblzYQMXmKchCheQWsRLOu2FA/WkGe6j 5PCIwy1rYB1BywLmDQJBAPOavFPunFiVKdabQd7PNMON5noHoR24Pm7pUqRmCJYk SwVSaFMFPxkH84nwWDeYgDAUl5bLUGlvZPDg5G1G/+MCQQDqgAN+w0Iw1PD4zZB6 9UwrCC6r38pmFmvJtHImYlj8L8RPtu7CTlyFVcUS58nPiDFpGcqtORQf0FwiETNd ucmjAkBU0cTPKJ7RjSZjLe3yiY0ipe7hAHUN5w/+CEmZKlnFBWAFu1rNxV7h9U3L 8p6UxQmlNBZQD/ywqXOpF3URw43nAkBH+WCZQK8JM+J+SwHEa5OkRY+lmzuRF+Kf dy3uEBOF29diLCCeLNUC669gPRpZA1E/E/Z8Ml+14ArXPfZJFyQHAkAw38xOTMcn R+RsweDw3ZD5xcFj4xSzvnbFo8pnCqvexk7IA/boNJiTKvEKNyN+IVjPHhIbdRXN qFIe8xDpCzqS -----END PRIVATE KEY-----` // 自定义配置项时 storage 必传 const ls = ItsStorage.create({ storage: 'local', namespace: 'its_', // 设置了 encryption 为 true 才会加密 encryption: true, publicKey, privateKey }) // 加密后存储值为 vt1UvDQMKK0rpDGJu+moce7aptHWaXTQ04+XkPr15f2RaQXpaY8Ar124G4o2IOBWpPNoWmXqNlUCHufhaMqPjWPJ4a8IAa2trMEpw6R2QmaDgGJooKqLYKS0rIIBHSA/rESkHc8ydbFXHBekPzgHIcvUU4DzlGY1F+4TlA7qg3s= ls.set('encrypt', '这个加密后看不懂!') // 输出:这个加密后看不懂! console.log(ls.get('encrypt')) ``` #### 3. 针对某项单独处理 有时候我们需要对某些项做特殊处理,正面举两个例子: 1. 假设我们全局使开启了加密,突然有个数据量很大,也不是敏感数据,此时我们存储时不想对其加密 ```javascript // 自定义配置项时 storage 必传 const ls = ItsStorage.create({ // storage 为 local 或 session storage: 'session', namespace: 'its_', // 开启加密 encryption: true, }) // 某一项不加密存储 ls.set('noEncrypt', '这个不加密存储!', null, false) // 获取时不要解密 console.log(ls.get('noEncrypt', null, false)) ``` 2. 假设我们全局使没有开启加密,突然有个敏感数据,此时我们存储时想对其加密 ```javascript // 自定义配置项时 storage 必传 const ls = ItsStorage.create({ // storage 为 local 或 session storage: 'session', namespace: 'its_', }) // 第一种 // 某一项加密存储 ls.set('encrypt', '这个加密后看不懂!', null, true) // 获取时要解密 console.log(ls.get('encrypt', null, true)) // 第二种 // 也可以使用自己的密钥进行加密 const publicKey = `-----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDfJUDWUj2+EAn2jjjXT5vvgPK+ gyKoJ05Ac9MXAq+zR8DbviThakouyMcYneHfBnjfg7Nr2oxzwhu+cFA0s1nFsdXx jl2lcyZvKh58brEMMFammXNp7sDb42En5oGl5girzHuf7yOAnAlji1WLOVj8kT0z hTwXcYrzAVu7tSkoiQIDAQAB -----END PUBLIC KEY-----` const privateKey = `-----BEGIN PRIVATE KEY----- MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAN8lQNZSPb4QCfaO ONdPm++A8r6DIqgnTkBz0xcCr7NHwNu+JOFqSi7Ixxid4d8GeN+Ds2vajHPCG75w UDSzWcWx1fGOXaVzJm8qHnxusQwwVqaZc2nuwNvjYSfmgaXmCKvMe5/vI4CcCWOL VYs5WPyRPTOFPBdxivMBW7u1KSiJAgMBAAECgYA5wce1cZX/kuExSwCVYkqnREYQ X5rh0UKk1hXmF9DoY4McnWuoWL2YvGkkCwGCm4c/uzP+j5PZBn3t3d40tdNfJ3eF WOEOXENdxhjNTBsptDwmqbSrhnzntB5ckblzYQMXmKchCheQWsRLOu2FA/WkGe6j 5PCIwy1rYB1BywLmDQJBAPOavFPunFiVKdabQd7PNMON5noHoR24Pm7pUqRmCJYk SwVSaFMFPxkH84nwWDeYgDAUl5bLUGlvZPDg5G1G/+MCQQDqgAN+w0Iw1PD4zZB6 9UwrCC6r38pmFmvJtHImYlj8L8RPtu7CTlyFVcUS58nPiDFpGcqtORQf0FwiETNd ucmjAkBU0cTPKJ7RjSZjLe3yiY0ipe7hAHUN5w/+CEmZKlnFBWAFu1rNxV7h9U3L 8p6UxQmlNBZQD/ywqXOpF3URw43nAkBH+WCZQK8JM+J+SwHEa5OkRY+lmzuRF+Kf dy3uEBOF29diLCCeLNUC669gPRpZA1E/E/Z8Ml+14ArXPfZJFyQHAkAw38xOTMcn R+RsweDw3ZD5xcFj4xSzvnbFo8pnCqvexk7IA/boNJiTKvEKNyN+IVjPHhIbdRXN qFIe8xDpCzqS -----END PRIVATE KEY-----` // 使用自己的公钥对某一项加密存储 ls.set('encrypt', '这个加密后看不懂!', null, true, publicKey) // 获取时解密要传对应的私钥 console.log(ls.get('encrypt', null, true, privateKey)) ``` #### 4. 同时使用 localStorage 和 sessionStorage ```javascript const local = ItsStorage.create({ storage: 'local', namespace: 'its_', }) const session = ItsStorage.create({ storage: 'session', namespace: 'its_', }) local.set('localStr', '这个是存在localStorage里的!') session.set('sessionStr', '这个是存在sessionStorage里的!') ``` #### 5. 配合 vue2 中使用 ```javascript // main.js import Vue from 'vue' import ItsStorage from 'its-storage' import App from './App.vue' const local = ItsStorage.create() Vue.prototype.$local = local Vue.config.productionTip = false new Vue({ render: h => h(App), }).$mount('#app') // App.vue export default { name: 'App', mounted() { this.$local.set('vue2Str', '在vue2中使用!') }, } ``` #### 6. 配合 vue3 中使用 ```javascript // main.js import { createApp } from 'vue' import ItsStorage from 'its-storage' import App from './App.vue' const app = createApp(App) const local = ItsStorage.create() app.config.globalProperties.$local = local app.mount('#app') // App.vue import { defineComponent } from 'vue' export default defineComponent({ name: 'App', mounted() { this.$local.set('vue3Str', '在vue3中使用!') }, }) // 若使用 ts 则增加代码如下 // src/global.d.ts import { ComponentCustomProperties } from 'vue' import { WebStorage } from 'its-storage/dist/storage/webStorage' declare module '@vue/runtime-core' { interface ComponentCustomProperties { $local: WebStorage } } ``` #### 7. 在html文件中引用 ```html