自定义封装sessionStorage(3DES加密解密)
关于3DES的sessionStorage加密解密及用法
安装好crypto-js模块(npm install crypto-js)
//导入crypto-js模块
const CryptoJS = require("crypto-js");
//封装自定义类 MyStorage
export class MyStorage {
// 这里采用token作为key,若不用token作为key可自定义
// static key = '0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF';
// 向量iv写死,也可由其他固定值代替
static iv = '01234567';
//补位key,让key填满64位,这里补0
static padKey(tokenKey) {
const tokenKeyLength = tokenKey.length;
let paddedKey = tokenKey;
if (tokenKeyLength < 64) {
const paddingLength = 64 - tokenKeyLength;
const padding = '\0'.repeat(paddingLength);
paddedKey = tokenKey + padding;
}
return paddedKey;
}
//加密处理
static encrypt(value, tokenKey) {
const plaintext = typeof value === 'string' ? value : JSON.stringify(value);
const paddedKey = this.padKey(tokenKey);
const encrypted = CryptoJS.TripleDES.encrypt(plaintext, CryptoJS.enc.Hex.parse(paddedKey), {
iv: CryptoJS.enc.Hex.parse(this.iv)
});
return encrypted.toString();
}
//解密处理
static decrypt(encryptedValue, tokenKey) {
const paddedKey = this.padKey(tokenKey);
const decrypted = CryptoJS.TripleDES.decrypt(encryptedValue, CryptoJS.enc.Hex.parse(paddedKey), {
iv: CryptoJS.enc.Hex.parse(this.iv)
}).toString(CryptoJS.enc.Utf8);
try {
return JSON.parse(decrypted);
} catch (error) {
return decrypted;
}
}
//对sessionStorage.getItem() 方法封装
static getItem(key, encryptionKey) {
const encryptedKey = this.encrypt(key, encryptionKey);
const encryptedValue = sessionStorage.getItem(encryptedKey);
return encryptedValue !== null ? (Object.prototype.toString.call(this.decrypt(encryptedValue, encryptionKey)) == '[object Object]' ? JSON.stringify(this.decrypt(encryptedValue, encryptionKey)) : String(this.decrypt(encryptedValue, encryptionKey))): null;
}
//对sessionStorage.setItem() 方法封装
static setItem(key, value, encryptionKey) {
const encryptedKey = this.encrypt(key, encryptionKey);
const encryptedValue = this.encrypt(value, encryptionKey);
return sessionStorage.setItem(encryptedKey, encryptedValue);
}
//对sessionStorage.removeItem() 方法封装
static removeItem(key, tokenKey) {
const encryptedKey = this.encrypt(key, tokenKey);
return sessionStorage.removeItem(encryptedKey);
}
//对sessionStorage.clear() 方法封装
static clear() {
return sessionStorage.clear();
}
//对sessionStorage.key() 方法封装
static key(index, tokenKey) {
const encryptedKey = sessionStorage.key(index);
return encryptedKey !== null ? this.decrypt(encryptedKey, tokenKey) : null;
}
//属性 sessionStorage 对象中的数据项 (键值对)数量
static get length() {
return sessionStorage.length;
}
}
本例使用token作为加密解密key值
sessionStorage.setItem("token","123456789")
**用法**
//设置key为'Sumu',value为'sumu10086'的会话存储。( 以加密形式存储,将键值对添加到存储中;如果键名存在,则更新其对应的值。 )
MyStorage.setItem('Sumu', 'sumu10086', sessionStorage.getItem("token"))
//从会话存储中取到key为'Sumu'对应的值。( 返回键名('Sumu')对应的值('sumu10086'的加密文本)。若没有返回null。 )
MyStorage.getItem('Sumu', sessionStorage.getItem("token"))
//去除key为'Sumu'的会话存储。( 将指定的键名('Sumu')从 sessionStorage 对象中移除。 )
MyStorage.removeItem('Sumu', sessionStorage.getItem("token"))
//返回当前 sessionStorage 对象的第index序号的key名称。若没有返回null。
MyStorage.key(index, sessionStorage.getItem("token"))
//返回一个整数,表示存储在 sessionStorage 对象中的数据项(键值对)数量。
MyStorage.length()
//清除 sessionStorage 对象所有的项。
MyStorage.clear()
结果如图:
本文来自博客园,作者:苏沐~,转载请注明原文链接:https://www.cnblogs.com/sumu80/p/17970342