跳到主内容
wychmod Developer Workspace
本地处理 wychmod 的 GitHub 头像

Base64 编解码工具 / BASE64 CODEC

内容只在当前浏览器中处理,不会主动上传或存储到服务器。Base64 是一种编码方式,不是加密;不要把它当作保密手段。支持文本与图片互转,图片模式提供拖放与文件选择。

本地处理 · 不上传 · 非加密 编码 UTF-8 路径 /tools/base64-tool.html
输入内容 可编辑
字符 0 UTF-8 字节 0
转换结果 只读
字符 0 UTF-8 字节 0
就绪。输入内容后点击编码或解码。
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);
}
?>