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日

相关文章

  • javascript判断机器是否联网的2种方法

    让我来为您提供关于”Javascript判断机器是否联网的2种方法”的详细攻略。 方法一:使用navigator.onLine属性 使用navigator.onLine属性是JavaScript判断机器是否联网的最简单方法之一。该属性是一个布尔值,指示设备是否联网。 以下是使用navigator.onLine的示例代码: if (navigator.onLi…

    JavaScript 2023年6月11日
    00
  • JavaScript字符串对象substring方法入门实例(用于截取字符串)

    JavaScript字符串对象substring方法入门实例(用于截取字符串) 什么是substring方法 JavaScript字符串对象的substring()方法是用于截取字符串的一种方式,该方法可以返回一个新的字符串,其内容是从原始字符串中指定的位置开始到另一个指定位置之间的字符。 substring方法的语法 字符串对象substring方法具有以…

    JavaScript 2023年5月28日
    00
  • 原生js实现简易抽奖系统

    当我们需要在网站上添加一个简单的抽奖系统时,可以使用原生js进行实现。以下是实现简易抽奖系统的详细攻略: 第一步:创建HTML结构 首先,在HTML页面上创建必要的结构。我们可以使用以下代码: <div> <h1>抽奖系统</h1> <p>点击下面的按钮开始抽奖:</p> <button id…

    JavaScript 2023年6月11日
    00
  • android WebView加载html5介绍

    下面我将为您详细讲解android WebView加载html5的攻略。 简介 WebView是Android提供的一个用于显示网页的控件,其底层使用的是Chrome浏览器内核,因此支持HTML5技术。HTML5是一种用于Web开发的标准,增加了很多新的功能,如音视频播放、Canvas绘图、自适应布局等。本文将介绍如何使用WebView来加载HTML5页面。…

    JavaScript 2023年6月11日
    00
  • html页面显示年月日时分秒和星期几的两种方式

    让我们来探讨一下如何在HTML页面中显示当前的年月日、时分秒和星期几的两种方式。 方式一:使用JavaScript实现 实现步骤: 在HTML页面中添加一个显示日期时间的标签,例如这里我们使用<p>标签作为容器,<p id=”datetime”></p>: <p id="datetime">…

    JavaScript 2023年5月27日
    00
  • javascript中的Base64、UTF8编码与解码详解

    JavaScript中的Base64和UTF-8编码与解码详解 简介 Base64编码和UTF-8编码是在JavaScript中经常用到的两种编码方式。本文将全面介绍这两种编码方式的概念、原理、应用以及在JavaScript中的使用。 Base64编码和解码 概念 Base64编码是一种对8位字符或字节流进行编码的方式,使得它们只包含ASCII可打印字符,用…

    JavaScript 2023年5月20日
    00
  • AS3 js正则表达式 反向引用(backreference)

    AS3是指Adobe Flash平台的ActionScript语言版本3,而JS则是指JavaScript语言。在这两者中,都可以使用正则表达式(Regular Expression)来匹配和处理字符串。反向引用(Backreference)是正则表达式中的元字符之一,其可以用于匹配已经匹配过的子模式。 反向引用的语法为“\数字”,其中“数字”表示前面已经定…

    JavaScript 2023年6月10日
    00
  • js调用后台、后台调用前台等方法总结

    当我们开发 Web 应用时,我们通常需要前端调用后台,在后台进行相应的处理之后再将结果返回给前端进行展示。在某些情况下,我们也需要后台主动调用前端的方法,进行相关的操作。在接下来的攻略中,我们将具体讲解这两种情况的实现方法。 前端调用后台 方法一:使用 Ajax Ajax 是一种在前端实现异步交互的技术,可以通过 Ajax 发送请求到后台进行相应的操作,然后…

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