You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在终端使用Openssl通过XChaCha20Poly1305对文件执行加解密操作

实现XChaCha20Poly1305文件加解密的方法

首先明确:你之前用的openssl enc命令不直接支持XChaCha20Poly1305这类带认证的AEAD算法,enc工具没有内置处理AEAD认证标签、扩展nonce的逻辑,所以需要换用OpenSSL的pkeyutl命令配合EVP_PKEY接口实现,操作步骤如下:

前置要求

你的OpenSSL版本需要高于等于1.1.1,可执行openssl version验证版本。

加密命令

# 生成24字节随机nonce(XChaCha20标准要求nonce长度为24字节)
openssl rand -out nonce.bin 24

# 执行加密,生成密文和16字节认证标签
openssl pkeyutl -encrypt -inkey <(echo -n "你的加密密码") -keyform raw -pkeyopt cipher:xchacha20-poly1305 -pkeyopt iv:$(xxd -p nonce.bin | tr -d '\n') -pkeyopt taglen:16 -in 待加密的明文文件路径 -out 密文数据.bin -pkeyopt md:sha512 -pkeyopt iter:700 -salt

# 把nonce、认证标签、密文拼接成最终输出文件,方便解密时直接读取
cat nonce.bin <(openssl pkeyutl -get-parameter tag -in 密文数据.bin) 密文数据.bin > 最终加密后的输出文件

# 清理临时文件
rm nonce.bin 密文数据.bin

如果你需要和之前一样输出base64编码的结果,可以在最后加一步:

base64 最终加密后的输出文件 > 最终加密后的base64格式文件

小提示:如果你担心命令行里直接输入密码会被记录到shell历史或者进程列表,可以把密码写入一个权限为600的临时文件,把命令里的<(echo -n "你的加密密码")替换为临时文件路径,加密/解密完成后删掉临时文件即可。


解密命令

如果你的密文是base64编码的,先解码:

base64 -d 加密的base64文件 > 密文二进制文件

然后执行解密:

# 从密文头部拆分出24字节nonce、16字节认证标签,剩下的是密文主体
head -c 24 密文二进制文件 > nonce.bin
tail -c +25 密文二进制文件 | head -c 16 > tag.bin
tail -c +41 密文二进制文件 > 密文主体.bin

# 执行解密,验证标签的同时解出明文
openssl pkeyutl -decrypt -inkey <(echo -n "你的加密密码") -keyform raw -pkeyopt cipher:xchacha20-poly1305 -pkeyopt iv:$(xxd -p nonce.bin | tr -d '\n') -pkeyopt tag:$(xxd -p tag.bin | tr -d '\n') -pkeyopt md:sha512 -pkeyopt iter:700 -salt -in 密文主体.bin -out 解密后的明文文件

# 清理临时文件
rm nonce.bin tag.bin 密文主体.bin

参数说明

所有参数和你之前用的chacha20命令参数保持对齐:

  • iter 700:密钥派生迭代次数和之前一致
  • md sha512:密钥派生哈希算法和之前一致
  • salt:默认开启加盐,和之前逻辑一致
  • 所有密码派生逻辑和你原有流程兼容,不需要调整原有密码设置习惯

内容的提问来源于stack exchange,提问作者SAVIO PRINCE

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 12:45:05