首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

js base64加解密

Base64 是一种常见的编码格式,用于将二进制数据转换为 ASCII 字符串,以便在文本协议中传输。Base64 编码不是加密,而是一种编码方式,可以轻松地进行解码。

基础概念

Base64 编码使用 64 个字符来表示二进制数据。这些字符包括大写字母(A-Z)、小写字母(a-z)、数字(0-9)以及符号(+ 和 /)。Base64 编码后的字符串通常比原始二进制数据长约 33%。

优势

  1. 兼容性:Base64 编码后的字符串可以在任何支持 ASCII 的系统中传输。
  2. 可读性:虽然编码后的字符串不是人类可读的,但它比原始二进制数据更容易处理和传输。

类型

Base64 编码有几种变体,包括标准 Base64、URL 安全的 Base64 和 MIME Base64。

应用场景

  1. 电子邮件附件:Base64 常用于在电子邮件中嵌入二进制文件。
  2. URL 参数:URL 安全的 Base64 编码用于在 URL 中传递二进制数据。
  3. JSON 数据:有时需要在 JSON 中嵌入二进制数据,Base64 编码可以用于此目的。

示例代码

以下是 JavaScript 中进行 Base64 编码和解码的示例代码:

代码语言:txt
复制
// 编码
const encodedString = btoa('Hello, World!');
console.log(encodedString); // 输出: "SGVsbG8sIFdvcmxkIQ=="

// 解码
const decodedString = atob(encodedString);
console.log(decodedString); // 输出: "Hello, World!"

遇到的问题及解决方法

问题1:特殊字符处理

问题描述:当字符串包含特殊字符(如 +, /, =)时,Base64 编码可能会导致问题。

解决方法:使用 URL 安全的 Base64 编码,将 + 替换为 -,将 / 替换为 _,并去掉末尾的 =

代码语言:txt
复制
function base64UrlEncode(str) {
  return btoa(str).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
}

function base64UrlDecode(str) {
  str = (str + '==='.slice((str.length + 3) % 4)).replace(/-/g, '+').replace(/_/g, '/');
  return atob(str);
}

const encodedUrlSafe = base64UrlEncode('Hello, World!');
console.log(encodedUrlSafe); // 输出: "SGVsbG8sIFdvcmxkIQ"

const decodedUrlSafe = base64UrlDecode(encodedUrlSafe);
console.log(decodedUrlSafe); // 输出: "Hello, World!"

问题2:Unicode 字符处理

问题描述:当字符串包含 Unicode 字符时,直接使用 btoaatob 可能会导致错误。

解决方法:先将字符串转换为 UTF-8 编码的二进制数据,再进行 Base64 编码和解码。

代码语言:txt
复制
function utf8ToBase64(str) {
  return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function(match, p1) {
    return String.fromCharCode('0x' + p1);
  }));
}

function base64ToUtf8(str) {
  return decodeURIComponent(atob(str).split('').map(function(c) {
    return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
  }).join(''));
}

const encodedUtf8 = utf8ToBase64('你好,世界!');
console.log(encodedUtf8); // 输出: "5L2g5aW977yM5LiW55WM"

const decodedUtf8 = base64ToUtf8(encodedUtf8);
console.log(decodedUtf8); // 输出: "你好,世界!"

通过这些方法,可以有效地处理 Base64 编码中的常见问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Python之Base64加解密

1 什么是Base64 ---- Base64是一种基于64个可打印字符来表示二进制数据的表示方法。由于2^6=64,所以每6个比特为一个单元,对应某个可打印字符。...3个字节有24个比特,对应于4个Base64单元,即3个字节可由4个可打印字符来表示。...至于什么情况下'+'和'/'需要被替换,最常见的就是对url进行Base64编码的时候。...2 Base64有什么使用场景 ---- Base64是一种任意二进制到文本字符串的编码方法,常用于在URL、Cookie、网页中传输少量二进制数据,包括MIME的电子邮件及XML的一些复杂数据。...3 base64转换过程 如下图所示: Python标准库中提供了base64模块,用来进行转换,因使用到以下二组方法,故做如下说明: base64.b64encode()将bytes类型数据进行base64

1.6K30
  • crypto-js aes 加解密

    前端 crypto-js aes 加解密 背景 前段时间公司做项目,该项目涉及到的敏感数据比较多,经过的一波讨论之后,决定前后端进行接口加密处理,采用的是 AES + BASE64 算法加密~ 网上关于...、DES、Rabbit、RC4、Triple DES 加解密,我们可以采用 npm install crypto-js --save 进行下载安装,也可以直接去 GitHub下载源码~ 其次我们需要定义两个方法...,分别是用于加密和解密,这里我将它放在了 utils 文件夹下,命名为 secret.js ,其具体代码如下: const CryptoJS = require('crypto-js');...将其暴露出去,方便在需要的时候进行引入~ ok,核心代码就这么多,是不是很简单啊,其实也么有你想的那么复杂哈,剩下的就是展示一下如何使用咯~ 示例 这里我定义了一个 index.vue 用来展示数据加解密的操作...,是不是感觉很简单啊,用起来很简单,原理可不简单,况且这也只是其中的一种方案,关于加解密的方法还有很多,感兴趣的小伙伴们可以继续做一些深入的研究哈~

    7.5K30

    原生JS实现base64解码与编码

    本文作者:IMWeb yuchenli 原文出处:IMWeb社区 未经同意,禁止转载 什么是base64 base64是用规定的64种字符来表示任意二进制数据的一种编码格式,而且这64种字符均是可见字符...那么base64编码中,是将每6位二进制作为一个单位解析后参照字符集的索引就可以得到编码后的字符。...原生JS实现其编码与解码 如果对JS熟悉的同学,可能会想到window对象的atob()和btoa()方法。但是只有在较新的游览器中才能使用,面对老的游览器,我们只能靠原生的JS自己造轮子了。...这里依然存在两个问题: 如何将字符串解析成二进制数据 如何对中文字符进行编码 JS解析字符串为二进制数 首先在页面中所有的字符串都是基于unicode编码的,然后js的字符串中刚好有charCodeAt...但是在JS已经有现成的方法了。

    11.5K10

    使用 Nginx NJS 实现高性能的 RSA 加解密服务

    在之前的文章《编写 Nginx 模块进行 RSA 加解密》中,我提到了如何编写 Nginx 模块,并借助 Nginx 实现相对高性能的加解密。...将上面的内容保存为 app.js,我们继续编写一段简单的 Nginx 配置(nginx.conf): load_module modules/ngx_http_js_module.so; user nginx...一个简单的 Web 表单界面,用于接收我们调试开发过程中的“加解密动作”、“需要加解密的数据”。 根据我们选择的动作,自动进行“加解密”操作,并返回具体加解密接口的处理结果。...(400, "Unsupported method\n"); } } 我们在调试入口添加了一个是否开启 Base64 编码的选项,并在开启 Base64 编码的情况下,调用加解密接口的时候,额外添加了一个...(实际业务使用,追求极致性能,可以考虑拆分成两个) location /auto{ js_content app.auto; } 实现 NJS 程序:自动加解密业务数据 我们先来实现一个能够根据我们指定的数据源

    2.2K50

    实战案例浅析JS加密 - DES与Base64

    通过点击提示的路径,我们找到以下代码: 找到这里就可以把需要的js代码扣出来,然后一步步调试了,通过补齐缺失的代码,得到以下js加密代码并运行: var CryptoJS = CryptoJS ||...Base64加密 JS调试实战案例 同样参照上面的调试流程,搜索加密参数'encodePassword',经过测试通过'encodePassword ='这关键字找到了加密所在的js,并通过断点验证 找到关键加密位置后...,查看加密的js文件,直接复制出来即可 base64加密比较简单,直接复制补上我们的密码,输出的就是加密后的字段了 function Base64() {...调试加密字段的流程,并且分别调试了关于DES与Base64加密的两个案例。...文中举例的案例属于菜鸟级别,但是千万因为这样就小瞧JS逆向这门学问,因为上面写的案例其实连js逆向入门的门槛都没跨过。 下一篇继续分享其他加密算法的小案例,希望对你有所帮助。

    3.5K20
    领券