Base64 编解码工具 / BASE64 CODEC
内容只在当前浏览器中处理,不会主动上传或存储到服务器。Base64 是一种编码方式,不是加密;不要把它当作保密手段。支持文本与图片互转,图片模式提供拖放与文件选择。
本地处理 · 不上传 · 非加密
编码 UTF-8
路径 /tools/base64-tool.html
输入内容
可编辑
字符 0
UTF-8 字节 0
转换结果
只读
字符 0
UTF-8 字节 0
就绪。输入内容后点击编码或解码。
上传图片
≤ 5 MB
点击选择图片或拖拽图片到此处
支持 JPG、PNG、GIF、WEBP 等浏览器可处理格式,单文件 ≤ 5 MB
图片预览
预览
上传图片后将在此显示预览
非加密提醒:Base64 只是编码方式,不提供任何安全保护。图片转 Base64 后体积会增加约 33%,大图片不适合直接内嵌。如需保护敏感数据,请使用专业的加密算法(如 AES、RSA),再对加密结果进行 Base64 编码以便传输。
01
为什么需要 Base64
Base64 把二进制数据编码成可打印 ASCII 字符,用于只支持文本的传输或存储场景。
- 把二进制数据编码成可打印字符(A–Z、a–z、0–9、+、/,= 填充)
- 在 JSON、XML、邮件附件(MIME)等文本格式中传输二进制
- Data URI 可在 HTML / CSS 中内嵌小图片,减少 HTTP 请求
- URL 安全版本使用
-和_替代+和/
02
不适合什么场景
Base64 既不是压缩,也不是加密,下列场景应避免直接使用。
- 大文件:体积膨胀约 33%,且无压缩收益
- 需要保密的数据:任何人都可以解码,不提供任何安全保护
- 需要长期缓存和 CDN 优化的大图片:无法被浏览器缓存复用
- 高频大量转换:编解码需要计算资源,注意性能影响
03
体积会增加
Base64 将每 3 个字节编码为 4 个字符,因此结果约为原始数据的 4/3 倍。
| 原始数据 | Base64 后 | 增加 |
|---|---|---|
| 10 KB | 约 13.3 KB | +33% |
| 100 KB | 约 133 KB | +33% |
| 1 MB | 约 1.33 MB | +33% |
换行符:某些实现会在固定长度处插入换行符,解码前需移除。
多语言代码示例
JavaScript / Node.js
// 文本编码(浏览器环境,推荐 TextEncoder)
const text = "Hello, Base64!";
const bytes = new TextEncoder().encode(text);
const encoded = btoa(String.fromCharCode(...bytes));
console.log(encoded); // SGVsbG8sIEJhc2U2NCE=
// 文本解码
const decodedBytes = Uint8Array.from(atob(encoded), c => c.charCodeAt(0));
const decoded = new TextDecoder().decode(decodedBytes);
console.log(decoded); // Hello, Base64!
// 图片编码(浏览器环境)
const fileInput = document.querySelector('input[type="file"]');
fileInput.addEventListener('change', (e) => {
const file = e.target.files[0];
const reader = new FileReader();
reader.onload = (event) => {
const base64 = event.target.result;
console.log(base64); // data:image/png;base64,iVBORw0KG...
};
reader.readAsDataURL(file);
});
// Node.js 中的 Base64
const buffer = Buffer.from("Hello, Base64!", 'utf-8');
const base64 = buffer.toString('base64');
console.log(base64); // SGVsbG8sIEJhc2U2NCE=
const decodedNode = Buffer.from(base64, 'base64').toString('utf-8');
console.log(decodedNode); // Hello, Base64!
Python
import base64
# 文本编码
text = "Hello, Base64!"
encoded = base64.b64encode(text.encode('utf-8'))
print(encoded) # b'SGVsbG8sIEJhc2U2NCE='
# 文本解码
decoded = base64.b64decode(encoded).decode('utf-8')
print(decoded) # Hello, Base64!
# 图片编码
with open('image.png', 'rb') as f:
image_data = f.read()
encoded_image = base64.b64encode(image_data)
print(encoded_image.decode('utf-8'))
# 图片解码
with open('decoded_image.png', 'wb') as f:
decoded_image = base64.b64decode(encoded_image)
f.write(decoded_image)
# URL安全的Base64编码(使用 - 和 _ 替代 + 和 /)
url_safe_encoded = base64.urlsafe_b64encode(text.encode('utf-8'))
print(url_safe_encoded) # b'SGVsbG8sIEJhc2U2NCE='
Java
import java.util.Base64;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
public class Base64Example {
public static void main(String[] args) throws Exception {
// 文本编码
String text = "Hello, Base64!";
String encoded = Base64.getEncoder()
.encodeToString(text.getBytes(StandardCharsets.UTF_8));
System.out.println(encoded); // SGVsbG8sIEJhc2U2NCE=
// 文本解码
byte[] decoded = Base64.getDecoder().decode(encoded);
String decodedText = new String(decoded, StandardCharsets.UTF_8);
System.out.println(decodedText); // Hello, Base64!
// 图片编码
byte[] imageBytes = Files.readAllBytes(Paths.get("image.png"));
String encodedImage = Base64.getEncoder().encodeToString(imageBytes);
System.out.println(encodedImage);
// 图片解码
byte[] decodedImage = Base64.getDecoder().decode(encodedImage);
Files.write(Paths.get("decoded_image.png"), decodedImage);
// URL安全的Base64编码
String urlSafeEncoded = Base64.getUrlEncoder()
.encodeToString(text.getBytes(StandardCharsets.UTF_8));
System.out.println(urlSafeEncoded);
}
}
Go
package main
import (
"encoding/base64"
"fmt"
"os"
)
func main() {
// 文本编码
text := "Hello, Base64!"
encoded := base64.StdEncoding.EncodeToString([]byte(text))
fmt.Println(encoded) // SGVsbG8sIEJhc2U2NCE=
// 文本解码
decoded, err := base64.StdEncoding.DecodeString(encoded)
if err != nil {
panic(err)
}
fmt.Println(string(decoded)) // Hello, Base64!
// 图片编码
imageData, _ := os.ReadFile("image.png")
encodedImage := base64.StdEncoding.EncodeToString(imageData)
fmt.Println(encodedImage)
// 图片解码
decodedImage, _ := base64.StdEncoding.DecodeString(encodedImage)
os.WriteFile("decoded_image.png", decodedImage, 0644)
// URL安全的Base64编码
urlSafeEncoded := base64.URLEncoding.EncodeToString([]byte(text))
fmt.Println(urlSafeEncoded)
}
PHP
<?php
// 文本编码
$text = "Hello, Base64!";
$encoded = base64_encode($text);
echo $encoded; // SGVsbG8sIEJhc2U2NCE=
// 文本解码
$decoded = base64_decode($encoded);
echo $decoded; // Hello, Base64!
// 图片编码
$imageData = file_get_contents('image.png');
$encodedImage = base64_encode($imageData);
echo $encodedImage;
// 图片解码
$decodedImage = base64_decode($encodedImage);
file_put_contents('decoded_image.png', $decodedImage);
// HTML中嵌入Base64图片
$mimeType = 'image/png';
$dataUri = "data:$mimeType;base64,$encodedImage";
echo "<img src='$dataUri' />";
// 检查是否为有效的Base64字符串
function isBase64($string) {
return (bool) preg_match('/^[a-zA-Z0-9\/\r\n+]*={0,2}$/', $string);
}
?>