JavaScript加密解密7种方法总结分析

JavaScript加密解密7种方法总结分析

JavaScript加密解密是前端工程师必须掌握的技能之一,本文总结了7种常见的JavaScript加密解密方法,并且提供了详细的代码示例。

1. Base64编码与解码

Base64是一种将二进制数据编码为文本的编码规则,其不仅可以用于前端加密解密,也可以用于图片、音频等二进制数据的传输。具体的编码和解码方法如下:

编码:

function base64Encode(str){
    var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
    var o1, o2, o3, h1, h2, h3, h4, bits, i = 0,
        ac = 0,
        enc = "",
        tmp_arr = [];

    if (!str) {
        return str;
    }

    str = unescape(encodeURIComponent(str))

    do {
        // pack three octets into four hexets
        o1 = str.charCodeAt(i++);
        o2 = str.charCodeAt(i++);
        o3 = str.charCodeAt(i++);

        bits = o1 << 16 | o2 << 8 | o3;

        h1 = bits >> 18 & 0x3f;
        h2 = bits >> 12 & 0x3f;
        h3 = bits >> 6 & 0x3f;
        h4 = bits & 0x3f;

        // use hexets to index into b64, and append result to encoded string
        tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4);
    } while (i < str.length);

    enc = tmp_arr.join('');

    var r = str.length % 3;

    return (r ? enc.slice(0, r - 3) : enc) + '==='.slice(r || 3);
}

解码:

function base64Decode(str){
    var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
    var o1, o2, o3, h1, h2, h3, h4, bits, i = 0,
        ac = 0,
        dec = "",
        tmp_arr = [];

    if (!str) {
        return str;
    }

    str = str.replace(/[^A-Za-z0-9+/=]/g, "");

    do {
        // unpack four hexets into three octets using index points in b64
        h1 = b64.indexOf(str.charAt(i++));
        h2 = b64.indexOf(str.charAt(i++));
        h3 = b64.indexOf(str.charAt(i++));
        h4 = b64.indexOf(str.charAt(i++));

        bits = h1 << 18 | h2 << 12 | h3 << 6 | h4;

        o1 = bits >> 16 & 0xff;
        o2 = bits >> 8 & 0xff;
        o3 = bits & 0xff;

        if (h3 == 64) {
            tmp_arr[ac++] = String.fromCharCode(o1);
        } else if (h4 == 64) {
            tmp_arr[ac++] = String.fromCharCode(o1, o2);
        } else {
            tmp_arr[ac++] = String.fromCharCode(o1, o2, o3);
        }
    } while (i < str.length);

    dec = tmp_arr.join('');

    return decodeURIComponent(escape(dec.replace(/\0+$/, '')));
}

举一个Base64编码和解码的例子:

var str = "Hello, world!";
var encoded = base64Encode(str); // "SGVsbG8sIHdvcmxkIQ=="
var decoded = base64Decode(encoded); // "Hello, world!"

2. 对称加密算法

对称加密算法指的是加密和解密使用相同密钥的加密算法,简单、高效,常见的对称加密算法有DES、3DES、AES等。

此处以AES加密算法为例,加密解密使用的是同一根秘钥,加密和解密方法如下:

var key = CryptoJS.enc.Utf8.parse("1234567812345678"); //16位秘钥
var iv = CryptoJS.enc.Utf8.parse('1234567812345678'); //16位向量
var encrypted = CryptoJS.AES.encrypt("Hello, world!", key, {
    iv: iv,
    mode: CryptoJS.mode.CBC,
    padding: CryptoJS.pad.Pkcs7
});
var decrypted = CryptoJS.AES.decrypt(encrypted, key, {
    iv: iv,
    padding: CryptoJS.pad.Pkcs7
});
var decryptedStr = decrypted.toString(CryptoJS.enc.Utf8); // "Hello, world!"

3. 非对称加密算法

非对称加密算法指的是加密和解密使用不同密钥的加密算法,常用的非对称加密算法有RSA、DSA等。

下面是RSA加密算法的加密解密方法:

// 生成密钥对
var keySize = 512;
var keyPair = cryptico.generateRSAKey("test", keySize);

// 获取公钥和私钥
var publicKey = cryptico.publicKeyString(keyPair);
var privateKey = cryptico.privateKeyString(keyPair);

// 使用公钥加密
var message = "Hello, world!";
var encrypted = cryptico.encrypt(message, publicKey);

// 使用私钥解密
var decrypted = cryptico.decrypt(encrypted.cipher, keyPair);

var decryptedPlainText = decrypted.plaintext; // "Hello, world!"

4. MD5哈希

MD5是一种常用的哈希算法,用于产生哈希值,其特点是不可逆、不可撤销、不可复原,使用md5.js库实现MD5加密解密:

var md5 = require("md5.js");
var str = "Hello, world!";
var hash = new md5().update(str).digest("hex"); //"86fb269d190d2c85f6e0468ceca42a20"

5. SHA1哈希

SHA1也是一种常用的哈希算法,同样不可逆、不可撤销、不可复原,SHA1.js库提供了SHA1加密解密的实现方法:

var SHA1 = require("sha.js");
var str = "Hello, world!";
var sha1 = new SHA1("SHA-1", "TEXT");
sha1.update(str);
var hash = sha1.digest("hex"); //"943a702d06f34599aee1f8da8ef9f7296031d699"

6. HMAC哈希

HMAC是一种用于消息鉴别的机制,基于哈希函数和密钥,在消息传输过程中防止消息被篡改。HMAC.js库提供了HMAC算法的实现:

var hmacSha256 = require("crypto-js/hmac-sha256");
var message = "Hello, world!";
var secret = "1234567812345678";
var hmac = hmacSha256(message, secret);
var hash = hmac.toString(); // "54d9d6fd12cb8a46b8f2aaeb7d2358f0b456f39b07fe92706a08d409c5aa9db3"

7. PBKDF2哈希

PBKDF2是一种基于密码的密钥推导函数,可以从密码导出密钥,形成合适长度的密钥,从而降低攻击成本。PBKDF2.js库提供了PBKDF2加密解密的实现方法:

var pbkdf2 = require("pbkdf2");
var password = "123456";
var salt = "salt"; //盐值
var keyLen = 256 / 32; //256位
var iterations = 1000; //迭代次数

var encPassword = pbkdf2.pbkdf2Sync(password, salt, iterations, keyLen, "sha256"); //buffer类型

var hash = encPassword.toString("hex"); // "059b15100f56d0e7d8f8c0ebd1f9238fe63ae5fd17575a2bcd5c0d1f058f5949"

以上是JavaScript加密解密7种方法的总结分析,每种加密方法都包含了详细的代码示例,以便读者实践和参考。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript加密解密7种方法总结分析 - Python技术站

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

相关文章

  • 用YUI做了个标签浏览效果

    让我来详细讲解如何用YUI库来实现标签浏览效果的完整攻略。 YUI库简介 YUI(Yahoo! User Interface Library)是雅虎公司推出的一个用于创建富交互性Web应用的JavaScript库,提供了一系列的工具和组件,方便开发人员开发Web应用。YUI组件包括DOM操作、事件管理、动画、日历、数据源、表单控件、图像轮换、布局管理、菜单、…

    JavaScript 2023年6月11日
    00
  • JS实现快速比较两个字符串中包含有相同数字的方法

    要实现快速比较两个字符串中包含有相同数字的方法,可以使用 JavaScript 中的正则表达式进行匹配。具体实现可以分为以下步骤: 1. 获取字符串中的数字 使用正则表达式将字符串中的数字提取出来。 const str = "abc1def2ghi3jkl"; const pattern = /\d+/g; const numArray …

    JavaScript 2023年5月28日
    00
  • JavaScript用select实现日期控件

    下面是使用JavaScript的select标签实现日期控件的攻略: 1. 准备工作 首先,我们需要在HTML中定义一个日期选择器的容器,以及年、月、日三个select标签来分别展示年、月、日的选择菜单。我们先来看一下HTML代码: <div id="datePicker"> <select id="yearS…

    JavaScript 2023年6月11日
    00
  • 微信小程序实现虎年春节头像制作

    下面为大家详细讲解“微信小程序实现虎年春节头像制作”的完整攻略。 一、背景介绍 2022年是中国农历的虎年,为了庆祝这一传统节日,我们打算通过微信小程序的形式为用户提供制作虎年春节头像的功能。 二、实现原理 在微信小程序中,我们可以通过使用canvas标签,动态生成图片,并将其保存到手机相册中。 实现的大致流程如下所示: 用户在小程序中选择模板并上传自己的照…

    JavaScript 2023年6月11日
    00
  • Discuz .net版本中的短消息系统

    Discuz .net是一款知名的论坛程序,其短消息系统是其重要的功能之一。本文将详细讲解Discuz .net版本中的短消息系统,包括如何创建、管理和使用短消息系统。 创建和启用短消息系统 在Discuz .net中,默认情况下是已经启用了短消息系统的,而且用户可以在论坛的任何页面中通过左上角的“短消息”链接进入短消息系统。如果管理员需要修改短消息系统的设…

    JavaScript 2023年6月11日
    00
  • JavaScript中的Document文档对象

    JavaScript中的Document文档对象是指代表整个HTML文档的对象,它包含了HTML文档的所有内容,如标签、文本、属性等等。它是所有网页DOM的顶级容器,JavaScript可以通过该对象来获取和修改所有的HTML元素以及其内容和属性。 Document对象的常用属性与方法 常用属性 document.title:表示HTML页面的标题。 例子:…

    JavaScript 2023年5月27日
    00
  • Js+Dhtml:WEB程序员简易开发工具包(预先体验版)

    “Js+Dhtml:WEB程序员简易开发工具包(预先体验版)”使用攻略 1. 概述 “Js+Dhtml:WEB程序员简易开发工具包(预先体验版)”是一款方便程序员快速开发WEB项目的工具包。该工具包包含多个实用的功能,如表单验证、AJAX请求等。通过简单的配置和使用,可以大大提高WEB开发效率。 2. 安装和配置 该工具包使用的是js和dhtml技术,因此只…

    JavaScript 2023年5月27日
    00
  • 一步步教你用js简单实现新年倒计时

    下面是“一步步教你用js简单实现新年倒计时”的完整攻略,内容包含以下几个步骤: 1. 创建HTML页面结构 首先,在HTML页面中创建元素用于展示倒计时的时间。可以创建以下几个元素: 一个用于显示天数的<span>元素,例如<span id=”days”></span>; 一个用于显示小时数的<span>元素,…

    JavaScript 2023年6月11日
    00
合作推广
合作推广
分享本页
返回顶部