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日

相关文章

  • 如何使用jQuery Mobile制作减号图标

    以下是使用jQuery Mobile制作减号图标的完整攻略: 首先,需要在HTML文件中引入jQuery Mobile库。可以通过以下代码实现: <head> <meta charset="utf-8"> <meta name="viewport" content="width=…

    jquery 2023年5月11日
    00
  • jQWidgets jqxGrid cardheight属性

    以下是关于“jQWidgets jqxGrid cardheight属性”的完整攻略,包含两个示例说明: 简介 jqxGrid 控件的 cardheight 属性用于设置卡片视图的高度。 完整攻略 以下是 jqxGrid 控件 cardheight 属性的完整攻略。 定义 cardheight 属性 在 jqxGrid 控件中,可以使用 cardheight…

    jquery 2023年5月11日
    00
  • jquery.validate使用详解

    jQuery.validate 使用详解 jQuery.validate 是一款用于前端表单验证的插件,与 jQuery 库配合使用,使用简单,功能强大。本文将详细讲解如何使用 jQuery.validate 插件。 引入 jQuery.validate 在使用 jQuery.validate 前,需要先引入 jQuery 库和 jQuery.validat…

    jquery 2023年5月28日
    00
  • JavaScript构建自己的模板小引擎示例

    下面是关于“JavaScript构建自己的模板小引擎示例”的攻略: 1. 什么是模板引擎? 模板引擎是一种将数据和模板相结合的工具,它的主要作用是将一个数据模型和模板相结合,生成最终的HTML代码。在前端开发中,使用模板引擎可以极大地提高编码效率。 2. JavaScript模板引擎的实现 在JavaScript中,我们可以通过原生的字符串操作来实现模板引擎…

    jquery 2023年5月27日
    00
  • jquery实现的简单轮播图功能【适合新手】

    下面是详细讲解“jquery实现的简单轮播图功能”的完整攻略: 概述 轮播图是目前很多网站常用的展示方式,jquery是常用的JavaScript库之一,可以方便快捷地实现轮播图的功能。 实现步骤 1. HTML结构 首先,我们要有一个HTML结构,可以实现轮播图的展示。HTML结构要求如下: <div class="slider-conta…

    jquery 2023年5月28日
    00
  • 不用jQuery实现的动画效果代码

    以下是“不用jQuery实现的动画效果代码”的完整攻略: 1. 确定动画效果的目标元素 在使用JavaScript实现动画效果时,需要先确定目标元素。可以使用 document.querySelector() 或 document.querySelectorAll() 方法获取目标元素。例如,以下代码会选择 class 为 target 的所有元素: con…

    jquery 2023年5月27日
    00
  • jQWidgets jqxTree selectItem()方法

    jQWidgets jqxTree selectItem() 方法 jqxTree 是 jQWidgets 提供的一个树形组件,它可以展示层级结构的数据支持多种交互。jqxTree 提供了 selectItem() 方法,用于在代码中选择树形组件中的节点。 selectItem() 方法 selectItem() 方法用于在代码中选择树形组件中的节点。该方法…

    jquery 2023年5月11日
    00
  • 如何用jQuery选择一个有多个类的元素

    使用 jQuery 选择多类元素,我们可以使用类别选择器,以”.”符号开头并紧跟着类名。如果要选择具有多个类的元素,则可以将多个类名用逗号分隔包裹在一个类别选择器中。下面是一个详细的攻略: 步骤一:编写 HTML 代码 我们首先需要编写一个包含多个类的 HTML 元素。例如: <div class="box red large"&g…

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