【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 安全模式、自动填充等高级功能。