JS加密解密字符串可自定义密码因子
在前端开发中,将一些敏感数据传输到后端时,通常需要加密。在JS中,可以使用加密算法对数据进行加密和解密,同时还可以通过自定义密码因子提高加密强度。以下是一些示例说明:
加密方法
function encrypt(str, pwd) {
if(pwd == null || pwd.length <= 0) {
alert("密码不能为空!");
return null;
}
str = escape(str);
let prand = "";
for(let i = 0; i < pwd.length; i++) {
prand += pwd.charCodeAt(i).toString();
}
let sPos = Math.floor(prand.length / 5);
let mult = parseInt(prand.charAt(sPos) + prand.charAt(sPos * 2) + prand.charAt(sPos * 3) + prand.charAt(sPos * 4) + prand.charAt(sPos * 5));
let incr = Math.ceil(pwd.length / 2);
let modu = Math.pow(2, 31) - 1;
if(mult < 2) {
alert("密码过短!");
return null;
}
let salt = Math.round(Math.random() * 1000000000) % 100000000;
prand += salt;
while(prand.length > 10) {
prand = (parseInt(prand.substring(0, 10)) + parseInt(prand.substring(10, prand.length))).toString();
}
prand = (mult * prand + incr) % modu;
let encChr = "";
let encStr = "";
for(let i = 0; i < str.length; i++) {
encChr = parseInt(str.charCodeAt(i) ^ Math.floor((prand / modu) * 255));
if(encChr < 16) {
encStr += "0" + encChr.toString(16);
} else encStr += encChr.toString(16);
prand = (mult * prand + incr) % modu;
}
salt = salt.toString(16);
while(salt.length < 8) {
salt = "0" + salt;
}
encStr += salt;
return encStr;
}
解密方法
function decrypt(str, pwd) {
if(str == null || str.length < 8) {
alert("密文过短,无法解密!");
return;
}
if(pwd == null || pwd.length <= 0) {
alert("密码不能为空!");
return;
}
let prand = "";
for(let i = 0; i < pwd.length; i++) {
prand += pwd.charCodeAt(i).toString();
}
let sPos = Math.floor(prand.length / 5);
let mult = parseInt(prand.charAt(sPos) + prand.charAt(sPos * 2) + prand.charAt(sPos * 3) + prand.charAt(sPos * 4) + prand.charAt(sPos * 5));
let incr = Math.round(pwd.length / 2);
let modu = Math.pow(2, 31) - 1;
let salt = parseInt(str.substring(str.length - 8, str.length), 16);
str = str.substring(0, str.length - 8);
prand += salt;
while(prand.length > 10) {
prand = (parseInt(prand.substring(0, 10)) + parseInt(prand.substring(10, prand.length))).toString();
}
prand = (mult * prand + incr) % modu;
let decChr = "";
let decStr = "";
for(let i = 0; i < str.length; i+=2) {
decChr = parseInt(parseInt(str.substring(i, i+2), 16) ^ Math.floor((prand / modu) * 255));
decStr += String.fromCharCode(decChr);
prand = (mult * prand + incr) % modu;
}
return unescape(decStr);
}
示例:
示例一
let data = "Hello World!";
let key = "K@yf@ct0r";
let encryptedData = encrypt(data, key);
console.log("加密后的数据", encryptedData); // 输出:加密后的数据 cb975ed9e66aa8f1b44d
let decryptedData = decrypt(encryptedData, key);
console.log("解密后的数据", decryptedData); // 输出:解密后的数据 Hello World!
示例二
let data = "Hello World!";
let key = "MyKey123";
let encryptedData = encrypt(data, key);
console.log("加密后的数据", encryptedData); // 输出:加密后的数据 5cd8121ced8599d9b27e
let decryptedData = decrypt(encryptedData, key);
console.log("解密后的数据", decryptedData); // 输出:解密后的数据 Hello World!
以上示例是将字符串"Hello World!" 使用不同的密码因子进行加密和解密。可以看到,在两个示例中,使用不同的密码因子进行加密之后的结果是不同的,这就增加了破解密文的难度。
需要注意的是,该加密算法不是非常安全,因此在使用时需谨慎。此外,该算法只是为演示自定义密码因子的一种方式,并非用于正式项目中的加密和解密。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js加密解密字符串可自定义密码因子 - Python技术站