← 返回

AES 在线加解密

AES-128 / AES-256 · GCM / CBC · 文本与文件 · 密钥与数据全程留在浏览器,不上传

加密设置

口令强度:—

文本加密 / 解密

字符数:0 | UTF-8 字节数:0 B

长度:0

文件加密 / 解密

点击选择文件,或把文件拖到这里(可多选)
文件只在本地读取和加密,不会上传

使用说明

怎么用

算法与安全设计

密文容器格式(v1,大端序)

偏移 长度 字段
08固定标识 AESTOOL1
81版本号 0x01
91分组模式:1=AES-GCM,2=AES-CBC
101密钥来源:1=PBKDF2 口令,2=原始密钥
111AES 密钥字节数:16(AES-128)或 32(AES-256)
124PBKDF2 迭代次数(原始密钥模式为 0
162盐长度(固定 16)
182IV 长度(GCM 为 12,CBC 为 16)
202原文件名长度(UTF-8 字节数,可为 0)
221标志位(bit0:是否包含原文件名)
231保留,固定为 0
24盐 ‖ IV ‖ 原文件名
之后密文载荷:GCM 为 密文 ‖ 16 字节标签;CBC 为 密文 ‖ 32 字节 HMAC-SHA256

头部整体作为 GCM 的 AAD(CBC 则被 HMAC 覆盖),所以头部同样不可篡改。为了让解密方自动还原文件名,原文件名以明文存在头部里(只存文件名本身,不含路径与内容);如果文件名本身敏感,加密前先把它改成无关的名字。

与其它程序对接(取消勾选「自描述容器」=裸模式)

裸模式输出的就是纯粹的 AES 密文,不带任何头部,可以跟 OpenSSL、Node.js、Java、Python 等实现双向互通。以 AES-256-CBC 为例:

# 生成随机密钥与 IV(Linux / macOS)
KEY=$(openssl rand -hex 32); IV=$(openssl rand -hex 16)

# 加密:AES-256-CBC + PKCS#7 填充,与本工具裸模式完全一致
openssl enc -aes-256-cbc -K $KEY -iv $IV -in 明文.txt -out 密文.bin

# 解密
openssl enc -d -aes-256-cbc -K $KEY -iv $IV -in 密文.bin -out 明文.txt

口令与密钥

能力边界