当前位置: 首页 > 知识库问答 >
问题:

带认证标记的openssl;aes;gcm;加密;命令行

荣波
2023-03-14

我正在尝试用'openSSL'th/命令行以AES-GCM模式加密文件

openssl enc -aes-256-gcm -p -iv 000000000000000000000000 -K 00000000000000000000000000000000000000000000000000000000000000 -nosalt -in file.raw -out file.enc`

加密工作,但我找不到检索结果GCM标记的方法。有办法弄到吗?

在这个文档(链接)中,我发现“注意,现在甚至可以使用像CCM或GCM这样的身份验证模式”,但仍然没有关于如何做到这一点的信息。

或者是否有其他标准的macos工具可以做同样的工作?


PS:我对通过通用的分布式命令行工具来实现这一点很感兴趣,这不是关于编写自己的实用程序的问题

共有1个答案

郗阳德
2023-03-14

注意:正如用户dave_thompson_085在下面指出的,答案的其余部分中的结果与当前版本的OpenSSL无关。我无意中使用了LibreSSLopenssl。阅读enc工具的OpenSSL文档的当前版本,其中包含以下语句

enc程序不支持像CCM和GCM这样的身份验证加密模式。该实用工具不存储或检索身份验证标记。

我想这回答了您的问题--取决于您使用的OpenSSL版本。

$ 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

在使用AES-256-GCM解密时,工具本身也会忽略标记的缺失。向stderr发出消息bad decrypt,但它似乎来自不同的层,而不是应用程序,应用程序会愉快地打印结果:

$ 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
 类似资料:
  • 我正在尝试使用带有相同密钥和 iv 的 AES 加密相同的文本。我使用 bash 方法和 ruby 的 openssl stdlib,并对加密结果进行 b64 编码。但结果不同!我试图理解为什么。这是我所做的: 红宝石(1.9.3-p448) 砰砰�� -iv参数设置为上面计算的iv_hex值。 ========================================= 我仔细检查了静脉注

  • 我有一些AES/GCM加密的数据,想解密它。我希望绕过身份验证对其进行解密,因为数据不包含身份验证信息(数据是由第三方应用程序加密的)。我尝试用javax.crypto包解密,它总是抛出标记不匹配错误。有没有办法绕过这个标记检查,解密数据。数据用AES128加密,使用12字节初始化向量。 编辑:我得到了这个问题的临时解决方案。不确定这是不是正确的方法。

  • 问题内容: 我需要使用以下命令在JAVA中解密在UNIX中加密的文件: 我必须像在UNIX中一样在Java中解密 有人可以给我一个Java代码来执行此操作吗? 问题答案: OpenSSL通常使用自己的基于密码的密钥派生方法,该方法在中指定EVP_BytesToKey,请参见下面的代码。此外,它会在多行中隐式地将密文编码为base 64,以便在邮件正文中发送密文。 因此,结果是伪代码: 因此解密为:

  • 我目前正在尝试使用OpenSSL加密二进制文件(它是项目的一部分,必须使用OpenSSL)。我设法安装了OpenSSL并将其与Visual Studio 2010链接。 在完成我的程序时,我没有得到任何带下划线的错误,但是在编译时,我得到了以下结果 有人知道如何解决这个错误吗?

  • 问题内容: 我有一个使用openssl工具进行加密的bash脚本。 以及试图解密脚本生成的文件的Java代码。 当我运行Java代码时,它不会打印任何内容。脚本和Java代码之间是否不匹配? 第二个问题是我是否可以重写它以使用密码而不是key / iv。为此,是否有办法知道openssl用于给定密码的iv? 问题答案: 正如上面提到的@ Polynomial,bash脚本和Java代码之间的键和i

  • 我只需要通过代码加密AES CBC 128位模式的字符串。我使用openssl库完成了这项工作,但无法获得正确的输出。 到目前为止,我已经完成了。 我的十六进制输出是:B0 15 751B50 80 D4 FF 81 68 146BB71B95 99 37 38 但正确的输出是:< code > 73 5C 04 F9 57 18 43 7C EE 68 27 59 2B 41 A8 DA (通过