js加密解密字符串可自定义密码因子

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技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • jQWidgets jqxSortable 启动事件

    关于 jQWidgets jqxSortable 的启动事件,我们从以下三点进行讲解: jqxSortable 的启动事件 在 jQWidgets jqxSortable 中,onStart 事件会在用户开始拖动一个 sortable 元素时被触发。下面是该事件的参数和一个示例: 参数: event:拖动事件的 jQuery 事件对象。 ui:在这个事件中没…

    jquery 2023年5月11日
    00
  • jQuery UI Tooltips close()方法

    以下是关于 jQuery UI Tooltips close() 方法的详细攻略: jQuery UI Tooltips close() 方法 close() 方法用于关闭工具提示小部件。 语法 $(selector).tooltip( "close" ); 参数 无参数。 示例一:关闭工具提示小部件 <!DOCTYPE html&…

    jquery 2023年5月11日
    00
  • jQuery插件ajaxFileUpload使用详解

    jQuery插件ajaxFileUpload使用详解 简介 ajaxFileUpload 是一款非常常用的 jQuery 插件,可以轻松地实现文件上传功能。本文将详细介绍该插件的使用方法。 安装 首先,需要引入 jQuery 库和 ajaxFileUpload 插件。 <script src="http://ajax.googleapis.c…

    jquery 2023年5月27日
    00
  • jQWidgets jqxGauge RadialGauge enable()方法

    以下是关于“jQWidgets jqxGauge RadialGauge enable()方法”的完整攻略,包含两个示例说明: 方法简介 jqxGauge 控件的 RadialGauge 类型的 enable() 方法用于启用仪表盘。该方法的语法如下: $("#gauge").jqxGauge(‘enable’); 在上述代码中,#gau…

    jquery 2023年5月10日
    00
  • Node.js基础入门之模块与npm包管理器使用详解

    一、Node.js模块系统Node.js 采用模块化编程的方式,每个文件即为一个模块。模块内部定义的变量、函数、对象等默认是私有的,不会被外部访问。可以通过 module.exports 对象,将需要暴露给外部的内容进行暴露。 导出模块 使用 module.exports 导出模块,可以将一个函数或对象暴露给另一个文件使用。示例如下: // math.js …

    jquery 2023年5月27日
    00
  • 分享2个jQuery插件–jquery.fileupload与artdialog

    下面详细讲解 “分享2个jQuery插件–jquery.fileupload与artdialog” 的完整攻略。 一、什么是 jQuery 插件? jQuery插件是在jQuery框架下封装的一些可复用代码,它可以帮助我们快速地开发出常见的功能,从而实现代码的高效复用。因此,使用jQuery插件可以大大提高我们的开发效率。 二、jquery.fileupl…

    jquery 2023年5月19日
    00
  • jQWidgets jqxGrid statusbarheight属性

    jQWidgets jqxGrid statusbarheight属性 jQWidgets jqxGrid 是一种表格控件,用于在 Web 应用程序中创建表格。statusbarheight 属性是 jqxGrid 控件的一个属性,用于设置状态栏的高度。本文将详细讲解 statusbarheight 属性的使用方法,并提供两个示例说明。 属性 statusb…

    jquery 2023年5月10日
    00
  • 用ASP开发网页需要牢记的注意事项

    下面我将详细讲解一下用ASP开发网页需要牢记的注意事项。 1. 不要使用过时的组件 ASP是一个非常古老的技术,虽然它仍然可以使用,但是为了更好的性能和安全性,应该使用较新的组件。在ASP中,可以使用组件来完成各种任务,如访问数据库、发送电子邮件等等。如果使用过时的组件,可能会存在安全漏洞,同时也不支持一些新的功能。 示例1:如果要访问数据库,应该使用ADO…

    jquery 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部