JavaScript的编码解码

JavaScript是一种非常常见且重要的编程语言。编码和解码是JavaScript中经常使用的技术。当然,我们也可以使用其他编程语言实现这些功能,但是在本文中,我们将把JavaScript作为中心,从不同的角度来讲解编码和解码的技术。

一、Base64编码和解码

Base64编码是一种将二进制数据转换成ASCII字符串的编码方式。在实际应用中,Base64编码被广泛使用,尤其是在传输二进制数据或在传统的邮件系统中。

在JavaScript中可以使用原生方法btoa进行Base64编码,使用atob进行Base64解码。

let str = "Hello World!";
let encoded = btoa(str);
let decoded = atob(encoded);

上述例子中,将字符串”Hello World!”进行Base64编码后,得到的结果为”SGVsbG8gV29ybGQh”,在进行Base64解码后,结果会恢复成原来的字符串。

二、URL编码和解码

如果我们需要在URL中传递特殊字符或非ASCII字符的话,我们就需要对其进行URL编码。在JavaScript中,可以使用原生方法encodeURIComponent进行URL编码,使用decodeURIComponent进行URL解码。

let str = "https://www.example.com?$param=value";
let encoded = encodeURIComponent(str);
let decoded = decodeURIComponent(encoded);

上述例子中,将字符串”https://www.example.com?$param=value”进行URL编码后,得到的结果为”https%3A%2F%2Fwww.example.com%3F%24param%3Dvalue”。在进行URL解码后,结果会恢复成原来的字符串。

三、Unicode编码和解码

Unicode是一种字符集,它包含了全世界范围内所有需要的字符。在JavaScript中,我们可以使用字符编码和解码函数实现对Unicode编码和解码的操作。

Unicode编码是将字符转换成数字表示,而Unicode解码则是将数字表示转换成相应的字符。

let str = "我爱编程";
let encoded = "";
let decoded = "";

for (let i = 0; i < str.length; i++) {
  encoded += "\\u" + str.charCodeAt(i).toString(16);
}

decoded = unescape(encoded.replace(/\\u/g, "%u"));

console.log(encoded);
console.log(decoded);

上述例子中,将字符串”我爱编程”进行Unicode编码后,得到的结果为”\u6211\u7231\u7f16\u7a0b”,在进行Unicode解码后,结果会恢复成原来的字符串。

四、JSON编码和解码

JSON是JavaScript Object Notation的缩写,它是一种轻量级的数据交换格式。在JavaScript中,我们可以使用JSON.stringify将对象转换成JSON字符串,使用JSON.parse将JSON字符串转换成对象。

let data = {
  name: "Tom",
  age: 18,
  address: {
    city: "Beijing",
    street: "123 Main St"
  }
};

let encoded = JSON.stringify(data);
let decoded = JSON.parse(encoded);

上述例子中,将一个对象进行JSON编码后,得到的结果为”{“name”:”Tom”,”age”:18,”address”:{“city”:”Beijing”,”street”:”123 Main St”}}”,在进行JSON解码后,结果会恢复成原来的对象。

五、加密和解密

加密和解密是一种常见的编码和解码技术。在JavaScript中,我们可以使用原生方法crypto.subtle进行这些操作。

下面是一个使用AES-CBC加密和解密的例子:

async function encrypt(str, key) {
  let encoder = new TextEncoder();
  let data = encoder.encode(str);

  let iv = crypto.getRandomValues(new Uint8Array(16));

  let algorithm = {
    name: "AES-CBC",
    iv: iv
  };

  let cryptoKey = await crypto.subtle.importKey("raw", key, algorithm, false, ["encrypt"]);

  let encrypted = await crypto.subtle.encrypt(algorithm, cryptoKey, data);

  return iv.toString() + new Uint8Array(encrypted).toString();
}

async function decrypt(str, key) {
  let iv = new Uint8Array(str.substr(0, 16));
  let data = new Uint8Array(str.substr(16));

  let algorithm = {
    name: "AES-CBC",
    iv: iv
  };

  let cryptoKey = await crypto.subtle.importKey("raw", key, algorithm, false, ["decrypt"]);

  let decrypted = await crypto.subtle.decrypt(algorithm, cryptoKey, data);

  let decoder = new TextDecoder();
  return decoder.decode(decrypted);
}

let str = "Hello World!";
let key = crypto.getRandomValues(new Uint8Array(16));

encrypt(str, key).then((encrypted) => {
  console.log(encrypted);

  decrypt(encrypted, key).then((decrypted) => {
    console.log(decrypted);
  });
});

上述例子中,我们使用AES-CBC进行加密和解密,使用crypto.getRandomValues生成一个随机秘钥,将字符串”Hello World!”加密后,得到的结果为一个包含IV和密文的字符串,使用相同的秘钥进行解密后,结果会恢复成原来的字符串。

六、总结

在JavaScript中,我们有很多种方法用于编码和解码。以上所提到的仅仅是其中的一部分。我们需要根据实际的需求来选择合适的编码和解码技术,以实现我们所需要的功能。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/245931.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-12 13:12
下一篇 2024-12-12 13:12

相关推荐

  • 使用JavaScript日期函数掌握时间

    在本文中,我们将深入探讨JavaScript日期函数,并且从多个视角介绍其应用方法和重要性。 一、日期的基本表示与获取 在JavaScript中,使用Date对象来表示日期和时间,…

    编程 2025-04-28
  • JavaScript中使用new Date转换为YYYYMMDD格式

    在JavaScript中,我们通常会使用Date对象来表示日期和时间。当我们需要在网站上显示日期时,很多情况下需要将Date对象转换成YYYYMMDD格式的字符串。下面我们来详细了…

    编程 2025-04-27
  • JavaScript中修改style属性的方法和技巧

    一、基本概念和方法 style属性是JavaScript中一个非常重要的属性,它可以用来控制HTML元素的样式,包括颜色、大小、字体等等。这里介绍一些常用的方法: 1、通过Java…

    编程 2025-04-25
  • CloneDeep函数在Javascript开发中的应用

    一、CloneDeep的概念 CloneDeep函数在Javascript中是一种深层克隆对象的方法,可以在拷贝对象时避免出现引用关系。使用者可以在函数中设置可选参数使其满足多种拷…

    编程 2025-04-25
  • JavaScript中的Object.getOwnPropertyDescriptors()

    一、简介 Object.getOwnPropertyDescriptors()是JavaScript中一个非常有用的工具。简单来说,这个方法可以获取一个对象上所有自有属性的属性描述…

    编程 2025-04-25
  • JavaScript保留整数的完整指南

    JavaScript是一种通用脚本语言,非常适合Web应用程序开发。在处理数字时,JavaScript可以处理整数和浮点数。在本文中,我们将重点关注JavaScript如何保留整数…

    编程 2025-04-25
  • JavaScript点击事件全方位指南

    一、click事件基础 click事件是最常用的鼠标事件之一,当元素被单击时触发。click事件适用于大多数HTML元素(<a>、<button>)和SVG…

    编程 2025-04-25
  • 详解JavaScript onclick事件

    一、onclick的基础知识 onclick事件是JavaScript中最常用的事件之一,它在用户点击某个HTML元素时触发。通常我们可以通过给元素添加一个onclick属性来绑定…

    编程 2025-04-25
  • JavaScript浅拷贝

    一、什么是浅拷贝 在JavaScript中,浅拷贝是一种将源对象的属性复制到目标对象中的方法。浅拷贝的实现方式有多种,包括直接赋值、Object.assign()、展开运算符、co…

    编程 2025-04-25
  • JavaScript 数组转成字符串

    一、数组转成字符串的基本操作 在 JS 中,将数组转成字符串是一项最基本但也最常见的操作之一。我们可以使用 Array 类型内置的 join() 方法实现。它将数组的元素连接成一个…

    编程 2025-04-25

发表回复

登录后才能评论