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

如何使用GPG仅生成AES加密字节,避免添加PGP额外信息?

嘿,我懂你的需求了——你想要用AES256做纯对称加密(不带PGP那些额外的头信息或元数据),这样能和用其他AES工具的朋友完成多层加密解密的交互,还不用互相透露密钥。不过得先给你提个醒:GPG的对称加密是基于PGP标准实现的,默认一定会给密文加上PGP的封装结构,哪怕你生成二进制输出,里面还是包含PGP的元数据(比如加密算法标识、校验信息等),没法直接得到纯AES加密的字节流。

下面给你两个方案,分别对应不同的场景:

方案1:用OpenSSL实现纯AES256对称加密(推荐,满足跨工具交互需求)

OpenSSL可以直接生成纯AES加密的字节流,没有任何额外封装,完美契合你和朋友跨工具协作的需求。以下是对应你4步流程的具体命令:

先准备原始文件

echo "sometext" > file_original.txt

步骤1:用keyA加密原始文件得到file_keyA.txt

AES加密需要初始化向量(IV)来保证加密安全性,这里我们把IV直接放在密文文件的开头,方便解密时读取:

# 生成16字节的随机IV(AES块大小固定为16字节)
IV=$(openssl rand -hex 16)
# 把明文密钥keyA转换成256位的十六进制密钥(AES256需要32字节密钥),然后加密
openssl enc -aes-256-cbc -K $(echo -n "keyA" | sha256sum | head -c 64) -iv $IV -in file_original.txt -out file_keyA.txt
# 将IV写入密文文件的开头(解密时先提取IV)
echo -n $IV | xxd -r -p | cat - file_keyA.txt > temp && mv temp file_keyA.txt

步骤2:用keyB加密file_keyA.txt得到file_keyA_keyB.txt

和步骤1逻辑一致,用keyB再次加密:

IV=$(openssl rand -hex 16)
openssl enc -aes-256-cbc -K $(echo -n "keyB" | sha256sum | head -c 64) -iv $IV -in file_keyA.txt -out file_keyA_keyB.txt
echo -n $IV | xxd -r -p | cat - file_keyA_keyB.txt > temp && mv temp file_keyA_keyB.txt

步骤3:用keyA解密file_keyA_keyB.txt得到file_keyB.txt

先提取开头的16字节IV,再用keyA解密:

# 提取密文开头的16字节IV
IV=$(head -c 16 file_keyA_keyB.txt | xxd -p)
# 截取密文部分(去掉开头的IV)
tail -c +17 file_keyA_keyB.txt > temp_cipher
# 解密得到file_keyB.txt
openssl enc -d -aes-256-cbc -K $(echo -n "keyA" | sha256sum | head -c 64) -iv $IV -in temp_cipher -out file_keyB.txt
rm temp_cipher

步骤4:用keyB解密file_keyB.txt还原原始文件

同样先提取IV再解密:

IV=$(head -c 16 file_keyB.txt | xxd -p)
tail -c +17 file_keyB.txt > temp_cipher
openssl enc -d -aes-256-cbc -K $(echo -n "keyB" | sha256sum | head -c 64) -iv $IV -in temp_cipher -out file_restored.txt
rm temp_cipher

# 验证还原结果
cat file_restored.txt  # 这里应该输出sometext

这个方案生成的完全是纯AES加密字节,没有任何额外封装,你的朋友用任何支持AES256-CBC的工具都能配合完成操作。


方案2:用GPG实现多层加密(仅适合GPG内部交互,无法跨工具)

如果你一定要用GPG,那只能接受PGP的封装结构,因为GPG本质是PGP工具,没法输出纯AES字节。不过你可以去掉ASCII装甲,生成二进制PGP密文,命令如下:

步骤1:用keyA加密原始文件

gpg --cipher-algo AES256 --symmetric --no-armor --passphrase "keyA" --output file_keyA.gpg file_original.txt

参数说明:--no-armor生成二进制PGP密文,--passphrase直接指定密钥(避免交互输入)。

步骤2:用keyB加密file_keyA.gpg

gpg --cipher-algo AES256 --symmetric --no-armor --passphrase "keyB" --output file_keyA_keyB.gpg file_keyA.gpg

步骤3:用keyA解密file_keyA_keyB.gpg

gpg --decrypt --passphrase "keyA" --output file_keyB.gpg file_keyA_keyB.gpg

步骤4:用keyB解密还原原始文件

gpg --decrypt --passphrase "keyB" --output file_restored.txt file_keyB.gpg

# 验证结果
cat file_restored.txt  # 输出sometext

注意:这个方案生成的.gpg文件是PGP格式的二进制文件,包含PGP元数据,你的朋友如果用非GPG的AES工具,是没法直接解密的。所以如果要和其他AES工具交互,还是方案1更合适。


内容的提问来源于stack exchange,提问作者Giorgio Napolitano

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:39:08