UNPKG

@iimm/shared

Version:

shared utils on browser and react env

64 lines (63 loc) 2.12 kB
/** 返回1个加了指定盐的内容加密器 */ export var byteEncoder = function byteEncoder() { var salt = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ""; var EncodeURIComponent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; var textToChars = function textToChars(text) { return text.split("").map(function (c) { return c.charCodeAt(0); }); }; var byteHex = function byteHex(n) { return ("0" + Number(n).toString(16)).slice(-2); }; var applySaltToChar = function applySaltToChar(code) { return ( // eslint-disable-next-line no-bitwise textToChars(salt).reduce(function (a, b) { return a ^ b; }, code) ); }; return function (content) { var txt = typeof content === "string" ? content : JSON.stringify(content); if (EncodeURIComponent) { txt = encodeURIComponent(txt); } return txt.split("").map(textToChars).map(applySaltToChar).map(byteHex).join(""); }; }; /** 使用指定盐解密(解密后会尝试JSON.parse) */ export var byteDecoder = function byteDecoder() { var salt = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ""; var EncodeURIComponent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; var textToChars = function textToChars(text) { return text.split("").map(function (c) { return c.charCodeAt(0); }); }; var applySaltToChar = function applySaltToChar(code) { return ( // eslint-disable-next-line no-bitwise textToChars(salt).reduce(function (a, b) { return a ^ b; }, code) ); }; return function (encodedContent) { var text = encodedContent.match(/.{1,2}/g).map(function (hex) { return parseInt(hex, 16); }).map(applySaltToChar).map(function (charCode) { return String.fromCharCode(charCode); }).join(""); var res = text; if (EncodeURIComponent) { res = decodeURIComponent(text); } try { var obj = JSON.parse(res); return obj; } catch (error) { return res; } }; };