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判断一个对象是数组(函数)的方法实例”的完整攻略。 判断一个对象是数组的方法 在 JavaScript 中判断一个对象是否为数组的方法有很多种,下面介绍两种比较常用的方法。 方法一:使用 Array.isArray() 使用 Array.isArray() 可以判断一个对象是否为数组,同时可以避免使用 typeof 判断的弊端。 示例代码如下…

    JavaScript 2023年5月27日
    00
  • 解决React报错React Hook useEffect has a missing dependency

    下面是解决React报错React Hook useEffect has a missing dependency 的完整攻略: 一、报错原因 首先,我们需要了解报错原因。 在使用 React Hooks 的过程中,如果 useEffect 中使用了某些变量或函数,但没有将它们添加到依赖项数组中,就会出现 “React Hook useEffect has …

    JavaScript 2023年6月11日
    00
  • 21个值得收藏的Javascript技巧

    下面就是“21个值得收藏的Javascript技巧”的完整攻略。 1. 使用变量解构(destructuring)来简化你的代码 解构可以让你从一个数据结构中将数据提取到单独的变量中,从而简化你的代码。示例: const obj = { a: 1, b: 2, c: 3 }; // 使用解构简化代码 const { a, b } = obj; console…

    JavaScript 2023年5月18日
    00
  • javascript实现带节日和农历的日历特效

    下面是详细讲解“javascript实现带节日和农历的日历特效”的完整攻略。 什么是带节日和农历的日历特效 带节日和农历的日历特效是一种非常实用的前端特效,它可以在日历上显示每个日期所对应的节日,并且还可以将日期转换为农历。这种特效可以用于各种网站中,例如在线日历工具、节日活动页面等。 技术难点 要实现带节日和农历的日历特效,需要解决以下技术难点: 如何获取…

    JavaScript 2023年5月27日
    00
  • JavaScript的console命令使用实例

    下面是关于“JavaScript的console命令使用实例”的攻略: 1. 什么是console命令 console命令是JavaScript中一个非常重要、强大的命令工具,通过调用console命令可以在浏览器的控制台显示输出信息,帮助开发者在调试Web应用时及时发现代码中的错误或获得有用的信息。 2. console命令使用方法 2.1 输出字符串 在…

    JavaScript 2023年5月28日
    00
  • 对javascript基本对象的属性以及方法的实例介绍

    当我们学习JavaScript时,基本对象(primitive data types)是学习的重点之一。JavaScript中的基本对象有六种:字符串、数值、布尔、null、undefined和Symbol。每种基本对象都有自己的属性和方法,了解它们可以加深我们对JavaScript的理解。下面,我们将详细介绍这六种基本对象的属性和方法。 1. 字符串 属性…

    JavaScript 2023年6月11日
    00
  • Dom 学习总结以及实例的使用介绍

    DOM 学习总结以及实例的使用介绍 DOM是什么? DOM(Document Object Model)即文档对象模型,是一种用于处理HTML或XML文档的标准编程接口。它将整个HTML或XML文档表示为一个树形结构,您可以使用DOM API来访问、操纵或更新各个部分。 DOM相关属性和方法 1. getElementById() 该方法返回一个具有指定 I…

    JavaScript 2023年6月10日
    00
  • 轻轻松松学JS调试(不下载任何工具)

    下面我来详细讲解“轻轻松松学JS调试(不下载任何工具)”的完整攻略。 调试JS代码的原理 在开始学习调试JS代码之前,先了解一下调试的原理。当JS代码出现错误时,浏览器会在控制台输出错误信息,我们可以通过错误信息来判断代码出错的位置和原因。因此,掌握控制台的使用是非常重要的。 使用console输出信息 console是调试中非常重要的一个工具,常用于输出变…

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