当前位置: 首页 > news >正文

【JavaScript】将字符串转为base64

一、基础方法(仅限 ASCII 字符)

若密码仅包含 ASCII 字符(如英文、数字、常见符号),可直接使用原生函数 btoa()

const password = "MySecurePassword123!";
const base64Encoded = btoa(password); // 编码
console.log(base64Encoded); // 输出 "TXlTZWN1cmVQYXNzd29yZDEyMyE="// 解码验证
const original = atob(base64Encoded);
console.log(original); // 输出原密码

注意:直接使用 btoa 处理中文或特殊符号会报错。


二、处理非 ASCII 字符(推荐通用方案)

当密码包含中文、Emoji 等多字节字符时,需先进行 UTF-8 编码转换:
方法 1:encodeURIComponent + btoa

function encodeToBase64(str) {return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, (match, p1) => String.fromCharCode(parseInt(p1, 16))));
}const password = "密码@安全!";
const base64Str = encodeToBase64(password); // 编码
console.log(base64Str); // 输出 "JUU1JUI4JUEzJUU3JUEwJTgxJUU1JUFFJTg4JUU1JTg1JUE4IQ=="// 解码
function decodeFromBase64(str) {return decodeURIComponent(atob(str).split('').map(c => '%' + c.charCodeAt(0).toString(16).padStart(2, '0')).join(''));
}
console.log(decodeFromBase64(base64Str)); // 输出原密码

原理:encodeURIComponent 将字符转为 UTF-8 字节序列,再通过正则替换为二进制格式。

方法 2:TextEncoder API(现代浏览器)

const password = "密码@安全!";
const encoder = new TextEncoder();
const data = encoder.encode(password);
const base64Str = btoa(String.fromCharCode(...data));
console.log(base64Str); // 输出 "5a2g5YWDQOaUv+Wtpg=="

优势:直接处理二进制数据,无需手动替换字符。


三、Node.js 环境实现

在 Node.js 中需使用 Buffer 对象:

const password = "密码@安全!";
const base64Str = Buffer.from(password).toString('base64'); // 编码
console.log(base64Str); // 输出 "5a2g5YWDQOaUv+Wtpg=="// 解码
const decoded = Buffer.from(base64Str, 'base64').toString('utf8');
console.log(decoded); // 输出原密码

注意:Buffer 默认使用 UTF-8 编码,可直接处理多字节字符。


四、URL 安全 Base64 格式

若需在 URL 中使用 Base64,需替换特殊字符:

function toUrlSafeBase64(str) {return btoa(str).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, ''); // 去除填充符
}const safeBase64 = toUrlSafeBase64("password#secure!");
console.log(safeBase64); // 输出 "cGFzc3dvcmQjc2VjdXJlIQ"

适用场景:URL 参数、文件名存储等。


五、第三方库(复杂场景推荐)

使用 js-base64 库简化操作:

import Base64 from 'js-base64';// 编码(自动处理 Unicode)
const base64Str = Base64.encode("密码@安全!");
console.log(base64Str); // 输出 "5a2g5YWDQOaUv+Wtpg=="// 解码
const original = Base64.decode(base64Str);
console.log(original); // 输出原密码

优势:支持 URL 安全模式、自动填充等高级功能。

http://www.xdnf.cn/news/308503.html

相关文章:

  • C/C++ 扩展智能提示太慢或无法解析项目
  • 使用VMware Workstation pro 17.5.1在Windows上安装Ubuntu 24.04.2的 详细步骤
  • 第一章-语言基础\3.STL
  • RHCSA Linux系统 网络管理
  • Grafana-新增用户
  • 104二叉树的最大深度
  • 标签语句分析
  • 第11次:用户注册(简要版)
  • 【大模型面试】大模型(LLMs)高频面题全面整理(★2025年5月最新版★)
  • 13前端项目----购物车修改
  • 结合Hutool 突增突降检测的算法
  • Linuxweb服务的部署及优化
  • 网站主机控制面板深度解析:cPanel、Plesk 及其他主流选择
  • AIDC智算中心建设:存储核心技术解析
  • suna直接从agent启动时,死循环问题
  • “FATAL ERROR: Reached heap limit Allocation failed” NodeJS 错误解决方案
  • URP - 深度图
  • 多模态大语言模型arxiv论文略读(六十一)
  • 码蹄集——直线切平面、圆切平面
  • postgresql 创建、移出数据保留策略
  • WiFi那些事儿(八)——802.11n
  • 基于Anaconda的Pycharm环境配置
  • 【IP101】图像处理进阶:从直方图均衡化到伽马变换,全面掌握图像增强技术
  • 游戏的TypeScript(6)TypeScript的元编程
  • 高级java每日一道面试题-2025年5月03日-基础篇[反射篇-编码]-使用反射创建`java.util.Date`对象,并调用其无参构造方法。
  • 【PPT制作利器】DeepSeek + Kimi生成一个初始的PPT文件
  • 安全不止一层:多因素认证的实现与管理指南
  • 荣耀A8互动娱乐组件部署实录(第1部分:服务端环境搭建)
  • 学习人工智能开发的详细指南
  • Kubernetes弹性伸缩:让应用自动应对流量洪峰与低谷