JS中常见编码及加密方式解析

JS中常见编码及加密方式解析

在JS中,常见的编码方式有:URL编码、Base64编码、HEX编码;常见的加密方式有:MD5加密、SHA1加密、对称加密和非对称加密。
本文将一一为您详细讲解,并提供相应的示例。

URL编码

URL编码是一种在网络上传输数据的编码方式,需要将数据中的特殊字符进行编码,以便网络进行传输和识别。在JS中我们可以使用encodeURI()函数和encodeURIComponent()函数分别对URL和URL参数进行编码。

示例:

var url = "http://www.example.com?key=value&name=张三";
var encodedURL = encodeURI(url)
console.log(encodedURL); //"http://www.example.com?key=value&name=%E5%BC%A0%E4%B8%89"

var param = "我是参数!";
var encodedParam = encodeURIComponent(param)
console.log(encodedParam); //"我%E6%98%AF%E5%8F%82%E6%95%B0%EF%BC%81"

Base64编码

Base64编码是一种将数据进行编码以便在网络上传输的方式,它可以将二进制数据转换为纯文本格式,常见于图片、音视频等二进制数据和一些加密算法中。

示例:

var originStr = "Hello, I am a base64 string.";
var encodedStr = btoa(originStr);
console.log(encodedStr); // "SGVsbG8sIEkgYW0gYSBiYXNlNjQgc3RyaW5nLg=="

var decodedStr = atob(encodedStr);
console.log(decodedStr); // "Hello, I am a base64 string."

HEX编码

HEX编码是一种将二进制数据转换成16进制形式的编码方式,由于16进制的字符集较为简单(只有0-9、A-F),因此可以减少数据发送的大小,常见的应用包括hash算法等。

示例:

var originStr = "Hello, I am a hex string.";
var encodedStr = "";
for (var i = 0; i < originStr.length; i++) {
  encodedStr += originStr.charCodeAt(i).toString(16);
}
console.log(encodedStr); // "48656c6c6f2c204920616d20612068657820737472696e672e"

var decodedStr = "";
for (var i = 0; i < encodedStr.length; i += 2) {
  var charCode = parseInt(encodedStr.substr(i, 2), 16);
  decodedStr += String.fromCharCode(charCode);
}
console.log(decodedStr); // "Hello, I am a hex string."

MD5加密

MD5是一种常见的加密算法,常用于检验信息传输完整性和防止数据被篡改。由于MD5是一种不可逆算法,因此可以用于对于密码等敏感信息的存储。

示例:

var originStr = "I am a string.";
var encodedStr = CryptoJS.MD5(originStr).toString();
console.log(encodedStr); // "8f9f8765dbcf5cb37a3595d7375c841b"

SHA1加密

SHA1也是一种常见的加密算法,常用于数字签名、数字证书、SSL通信等方面。同样,SHA1也是一种不可逆算法。

示例:

var originStr = "I am a string.";
var encodedStr = CryptoJS.SHA1(originStr).toString();
console.log(encodedStr); // "ebed656a941bcb0f38bf67c7368b1332b06abc53"

对称加密

对称加密是一种加密方式,使用的加密与解密算法相同,因此常用于保护隐私、认证、授权等操作。

示例:

var key = CryptoJS.enc.Hex.parse('000102030405060708090a0b0c0d0e0f');
var iv = CryptoJS.enc.Hex.parse('101112131415161718191a1b1c1d1e1f');
var plainText = '我爱编程!';
var encrypted = CryptoJS.AES.encrypt(plainText, key, {iv: iv});
console.log(encrypted.toString());

var decrypted = CryptoJS.AES.decrypt(encrypted, key, {iv: iv});
console.log(decrypted.toString(CryptoJS.enc.Utf8));

非对称加密

非对称加密是一种加密方式,采用的是公钥和私钥两种密钥。通常采用公钥加密、私钥解密的方式进行加密,或者私钥加密、公钥解密的方式进行数字签名等操作。

示例:

var ecPrivateKey = '-----BEGIN PRIVATE KEY-----\n' +
    'MHcCAQEEINkpJuwm2mtLcW6Q/4CboeCRRAsPEO93WDzW12Jf+oXHoAoGCCqGSM49\n' +
    'AwEHoUQDQgAE/JIJpIMdzM5E7Hc/ef+ZmpN/3z1TpanXyFWh1vJp07gNNGUT9Z5J\n' +
    'xUc1Mywoj4C26qgH4EcH9Z9OgrzlnGY3w==\n' +
    '-----END PRIVATE KEY-----';

var ecPublicKey = '-----BEGIN PUBLIC KEY-----\n' +
    'MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE/JIJpIMdzM5E7Hc/ef+ZmpN/3z1T\n' +
    'panXyFWh1vJp07gNNGUT9Z5JxUc1Mywoj4C26qgH4EcH9Z9OgrzlnGY3w==\n' +
    '-----END PUBLIC KEY-----';

var ecParams = {
    key: ecPrivateKey,
    format: 'pem',
    cipher: 'aes-256-cbc',
    passphrase: '123456'
};

var plainText = "hello world!";

// 加密
var encrypted = CryptoJS.Crypto.encrypt("ECC", plainText, ecParams, {pubkey: ecPublicKey});
console.log(encrypted.toString());

// 解密
var decrypted = CryptoJS.Crypto.decrypt("ECC", encrypted, ecParams);
console.log(decrypted.toString(CryptoJS.enc.Utf8));

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS中常见编码及加密方式解析 - Python技术站

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

相关文章

  • JS计算网页停留时间代码

    JS计算网页停留时间代码可以帮助网页作者分析读者在该网页上的停留时间,进而提高网站的口碑和用户粘度。以下是JS计算网页停留时间代码的完整攻略。 1. 标准浏览器方法 要实现JS计算网页停留时间的代码,可以使用标准的浏览器方法。具体实现方法如下: 在网页中添加以下代码: <script> var timeStart=0, timeEnd=0, ti…

    JavaScript 2023年5月27日
    00
  • js使用DOM设置单选按钮、复选框及下拉菜单的方法

    下面我为您详细讲解“js使用DOM设置单选按钮、复选框及下拉菜单的方法”的完整攻略。 一、DOM设置单选按钮的方法 要设置单选按钮,首先需要获取所有单选按钮,然后遍历它们,找到需要选中的单选按钮,然后给它添加 checked 属性即可。 以下是具体代码示例: <input type="radio" name="gender…

    JavaScript 2023年6月10日
    00
  • AngularJs expression详解及简单示例

    下面是详细的“AngularJs expression详解及简单示例”的攻略。 什么是AngularJS表达式 AngularJS表达式是一个AngularJS模板内的小片段,用于绑定到AngularJS编译器$compile的作用域属性。表达式以{{ expression }}的形式出现在双括号中,它们绑定到当前作用域上的JavaScript变量。通俗点说…

    JavaScript 2023年6月11日
    00
  • 采用自执行的匿名函数解决for循环使用闭包的问题

    采用自执行的匿名函数解决 for 循环使用闭包的问题可以避免 JavaScript 中被称为“闭包陷阱”的问题。下面是该攻略的详细步骤: 1. 闭包陷阱 在 JavaScript 中,当一个函数内部的函数在执行时访问外部函数的变量时,这个内部函数将创建一个闭包,闭包可以访问外部函数的变量。在使用循环的情况下,由于循环的特性,每个循环迭代都会创建一个新的闭包,…

    JavaScript 2023年6月10日
    00
  • JavaScript使用yield模拟多线程的方法

    下面是我准备的详细攻略。 前言 JavaScript本身是单线程的,即一次只能执行一个任务。这限制了JavaScript在一些需要同时执行多个任务的场景下的表现。 为了解决这个问题,JavaScript社区为我们提供了多线程的方案:使用Web Worker。Web Worker让我们能够在JS中使用多线程在后台运行JS程序。 然而,在某些更简单的情况下,我们…

    JavaScript 2023年5月28日
    00
  • 使用 JScript 创建 .exe 或 .dll 文件的方法

    以下是使用 JScript 创建 .exe 或 .dll 文件的方法的完整攻略。 方案1:使用 JScript.NET 创建 .dll 文件 步骤1:打开 Visual Studio 并创建新项目 打开 Visual Studio。在菜单栏上选择“文件” -> “新建” -> “项目”。 在“新建项目”对话框中,选择“Visual J#” -&g…

    JavaScript 2023年5月27日
    00
  • JS实现多物体运动的方法详解

    JS实现多物体运动的方法详解 在Web开发中,常常需要实现多个物体同时进行运动的效果,这时我们可以使用JavaScript来控制多个DOM元素的运动。本文将详细讲解JS实现多物体运动的方法。 步骤一:获取多个DOM元素的初始状态 在程序开始运行之前,我们需要获取多个DOM元素的初始状态,这些状态包括元素的初始位置、大小、颜色等信息。在JavaScript中可…

    JavaScript 2023年6月11日
    00
  • JavaScript实现数组对象去重的多种方法

    下面我来为大家详细讲解“JavaScript实现数组对象去重的多种方法”。 一、背景介绍 在前端开发中,我们经常需要对数组进行去重操作,以减少某些操作的时间复杂度。在JavaScript中,实现数组对象去重的方法有很多,也存在各自的优缺点。下面我将为大家介绍一些常用的去重方法以及其优缺点。 二、方法一:利用Set(ES6) 由于ES6出现了Set数据类型,所…

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