我正在尝试使用“ openssl” th /命令行以AES-GCM模式加密文件
openssl enc -aes-256-gcm -p -iv 000000000000000000000000 -K 00000000000000000000000000000000000000000000000000000000000000 -nosalt -in file.raw -out file.enc`
加密有效,但是我找不到一种方法来检索生成的GCM标签。 有办法吗?
在本文档(link中,我发现“请注意,现在甚至可以使用CCM或GCM之类的身份验证模式”,但仍然没有任何信息来做到这一点。
或者是否存在其他可以完成相同工作的标准macos工具?
PS:通过通用的分布式命令行工具实现这一点很有趣,这不是编写自己的实用程序的问题
答案 0 :(得分:1)
注意:正如下面的dave_thompson_085用户所指出的,其余答案中的结果与OpenSSL的当前版本无关。我不小心使用了LibreSSL openssl
。阅读OpenSSL documentation for the enc
tool的当前版本,其中包含以下句子
enc程序不支持经过身份验证的加密模式,例如 CCM和GCM。该实用程序不存储或检索身份验证 标签。
我想这会回答您的问题-取决于您使用的OpenSSL版本。
原始答案,可通过macOS随附的LibreSSL openssl
获得:
使用openssl enc
应用程序时,GCM标签未存储在输出文件中。您可以从以下单行代码中看到这一点:
$ echo -n 'abcdefghijklmnop' | openssl enc -aes-256-gcm -K 0 -iv 0 | hexdump -C
00000000 af c5 23 59 28 06 0c 06 6e 24 ae bf d7 9d f2 68 |..#Y(...n$.....h|
00000010
输出的大小与输入的大小完全相同,没有标记字节。
您还可以通过检查实现enc.c来查看它。如OpenSSL Wiki page on EVP Authenticated Encryption and Decryption中所述,它不会进行任何EVP_CIPHER_CTX_ctrl()
调用来处理GCM标签。换句话说,他标记数据会丢失。
在使用aes-256-gcm
进行解密时,工具本身也会忽略标签的缺失。一条消息bad decrypt
被发送到stderr
,但这似乎来自与应用程序不同的层,该应用程序愉快地打印了结果:
$ echo -n 'abcdefghijklmnop' | openssl enc -aes-256-gcm -K 0 -iv 0 | openssl enc -aes-256-gcm -K 0 -iv 0 -d
bad decrypt
abcdefghijklmnop
答案 1 :(得分:0)
自此发布以来很长一段时间,但对于其他人:
当涉及“常用命令行工具”时,AES GCM不可用。最接近的可能是AESCRYPT,它具有记录的文件格式和多种语言实现的优点。有关详细信息,请访问aescrypt.com。