【问题标题】:`md` param doesn't fix `error:06065064:digital envelope routines` error in OpenSSL`md` 参数无法修复 OpenSSL 中的 `error:06065064:digital envelope routines` 错误
【发布时间】:2021-10-26 11:23:12
【问题描述】:

我和我的同事正在尝试交换加密的配置文件。 A 可以解密由 B 加密的文件encrypted-dev.enc。但我无法解密,B 也无法解密我发送给她的文件。错误是

bad decrypt
4672347584:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:crypto/evp/evp_enc.c:610:

通过阅读(例如this 答案),此错误指的是openssl 用于消息摘要的算法。为了解决这个问题,人们总是告诉你用-md md5之类的参数来指定算法。但是我们的命令已经包含了这个参数。

  • 人员 A 使用的是 openssl 1.1.1f。
  • 人员 B 使用的是 openssl 1.1.1i。
  • 我正在使用 openssl 1.1.1j。

为了加密,我们使用这个命令:

export CONFIG_KEY='[ key ]'
openssl enc -md sha1 -aes-256-cbc -pbkdf2 -pass env:CONFIG_KEY -out ./tests/e2e/config/encrypted-dev.enc -in ./tests/e2e/config/config-dev.json

为了解密,我们这样做:

export CONFIG_KEY='[ key ]'
openssl enc -md sha1 -aes-256-cbc -pbkdf2 -d -pass env:CONFIG_KEY -in ./tests/e2e/config/encrypted-dev.enc -out ./tests/e2e/config/config-dev.json

还有其他人遇到过这种情况吗?

【问题讨论】:

  • 这也可能是因为“密钥”之间的编码差异 - 当然,它们实际上是密码,而不是密钥。您可能使用非 ASCII 字符吗?你在哪个系统上?
  • 谢谢!我们都在 macOS 上,并以相同的方式从同一来源获取密钥。
  • 我认为你是对的@MaartenBodewes - 这个问题可能是由于缺少某些字符的密钥副本引起的。我们现在可以使用-md md5 参数进行加密/解密。 openssl 的错误消息没有给你任何线索似乎令人难以置信,但我想这是出于安全原因。
  • OpenSSL 从未真正设计用于通过命令行进行安全加密。对我来说,它似乎更像是一个使用加密函数的示例(例如,迭代计数为 1 的 PBKDF)。但是,在这种情况下:无法区分损坏的密文或错误的密钥,因此它只是给出了一个相当技术性的错误消息,即填充无效。您可能希望改用经过身份验证的加密。
  • 非常感谢您为我指明了正确的方向!

标签: encryption openssl sha1


【解决方案1】:

要调查您的问题,请添加 -p 标志以转储密钥和 IV,它们在加密和解密时必须相同。添加-nosalt 禁用加盐密码(具有随机值)以使密钥计算的密码保持不变。

$ openssl enc -p -nosalt -md sha1 -aes-256-cbc -pbkdf2 -pass env:CONFIG_KEY -out ./tests/e2e/config/encrypted-dev.enc -in ./tests/e2e/config/config-dev.json
key=27D3CEEB44142947B9ADFA4E6D7F6EB731EB6828A6CD4C49257079470599A443
iv =35E21E3684C06DB2F182D69D99BD6E9C

在你的情况下,你会得到两个不同的值,这是你的问题。

参数名称CONFIG_KEY不准确,因为你设置的是密码nota key,CONFIG_PASSW会更合适。

如果您的目标是使用密钥(不是密码),则可以使用此语法

$ openssl enc -e -aes-256-cbc -nosalt -K AC7CBA91D9523EA2A9166341EC66D9DDCB14D3F6BCE33ADB59B16BE8F40AE607 -iv 208DE031141C4ACA18EA7B71B2EAA935 -in test.txt -out test.enc

$ openssl enc -d -aes-256-cbc -nosalt -K AC7CBA91D9523EA2A9166341EC66D9DDCB14D3F6BCE33ADB59B16BE8F40AE607 -iv 208DE031141C4ACA18EA7B71B2EAA935 -in test.enc
Hello world !!!

【讨论】:

  • 您能否为 openssl 新手 Arnaud 提供更多信息?在这种情况下,“转储”是否意味着在输出中同时显示键和初始化向量(无论是什么)?不加盐有什么好处?我们确实注意到我们的加密文本以 Salted__ 开头,但不确定其重要性,因为我们没有指定盐。
猜你喜欢
  • 2022-12-15
  • 2023-01-24
  • 2022-11-13
  • 2022-12-28
  • 2023-01-26
  • 2023-01-25
  • 2023-02-13
  • 2022-11-08
  • 2016-09-04
相关资源
最近更新 更多