【问题标题】:Running Base64 command works in terminal but not in bash script. Trying to decypher an AES 256 encrypted string运行 Base64 命令在终端中有效,但在 bash 脚本中无效。尝试解密 AES 256 加密字符串
【发布时间】:2022-01-18 02:04:30
【问题描述】:

我正在尝试使用 OpenSSL 对 AES-256-CBC 加密字符串进行解密。我的加密字符串是使用此处提到的 c# 代码加密的 (OpenSSL encryption using .NET classes)

我首先尝试使用如下 openssl 命令解密,

openssl enc -d -base64 -aes-256-cbc -md md5 -pass pass:mypass -in my_file.sh_enc -out myfile.sh

但是这个命令返回一个错误,

error reading input file

所以我尝试使用 -A-a 而不是 -base64 但两个命令都返回 bad magic number。

找了一会,发现需要先解码base64字符串,然后再解密。所以我运行了命令,

base64 -d my_file.sh_enc | openssl enc -d -aes-256-cbc -md md5 -pass pass:mypass -out myfile.sh

当尝试从终端执行此命令时,此命令运行良好。 (Ubuntu 20.04)。

但是当我在 .sh bash 脚本中添加相同的命令时,我得到一个错误,

WARNING:deprecated key derivation used.
Using -iter or -pbkdf2 would be better.
bad decrypt
140285552608576:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:../crypto/evp/evp_enc.c:610:

我尝试将 base64 结果存储在临时文件中,然后将临时文件作为 -in arg 传递给 OpenSSL,但我仍然面临同样的问题。任何人都可以帮助我理解并提供有关如何解决此问题的解决方案吗?

(如果我的解释不恰当,请见谅。请发表评论,我会尽量详细说明)

更新 1:下面是我的 bash 文件 My bash script

【问题讨论】:

  • 您是否将在 shell 中运行的确切命令复制粘贴到脚本中,或者您是否对其进行了一些小的修改(例如,将文件名或密码放入变量中)?你是如何运行脚本的?
  • 我将我的密码作为 pass="mypass" 存储在一个变量中,并在命令中使用了 -pass pass:$pass。除此之外,我没有做任何改变。 @thatotherguy
  • 从终端执行which openssl 并编写一个执行which openssl 的bash 脚本并确保它们匹配。
  • @Vercingatorix 他们确实匹配。两者都指向 /usr/bin/openssl。我也试过whereis。他们也很匹配。
  • 嗯。令人费解。我能想到的唯一剩下的事情就是使用#!/bin/bash -x 并查看它打印出来的内容。我看不出这会如何澄清任何事情,但值得一试。

标签: bash encryption terminal openssl aes


【解决方案1】:

您的密码未正确传递。将pass:$pass 放在双引号中。您可能需要为外壳转义它。将任何反斜杠加倍,并在任何 $ 之前放置一个反斜杠。

我是这样知道的:

$ echo Hello, world | openssl enc -e -a -aes-256-cbc -md md5 -pass pass:foo -out /tmp/enc
*** WARNING : deprecated key derivation used.
Using -iter or -pbkdf2 would be better.
$ openssl enc -d -a -aes-256-cbc -md md5 -pass pass:foo -in /tmp/enc
*** WARNING : deprecated key derivation used.
Using -iter or -pbkdf2 would be better.
Hello, world
$ openssl enc -d -a -aes-256-cbc -md md5 -pass pass:foof -in /tmp/enc
*** WARNING : deprecated key derivation used.
Using -iter or -pbkdf2 would be better.
bad decrypt
140045393098112:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:../crypto/evp/evp_enc.c:610:

【讨论】:

  • 是的,这就是问题所在。密码是罪魁祸首,在正确使用带引号的密码并转义输出文件路径后,该命令可以正常工作。十分感谢你的帮助。整天被这样一个常见的错误所困扰。省了我很多麻烦。非常感谢@Vercingatorix
  • @MikeRoss 很高兴我能帮上忙。 OpenSSL 可以使用更多用户友好的错误消息,嗯?
  • @Vercingtorix 绝对。呜呜!!为什么它必须如此神秘?也许是因为密码学,我不知道:p 感谢您帮助我尝试它。我实际上正在将我的一个应用程序从使用 AES-128-CBC 升级到 256 位,它充当本地服务器和 cron 脚本之间的桥梁。多亏了你,我现在已经准备好测试它的案例了。 :)
  • 一开始,openssl 命令行程序仅用作测试/调试工具。它从未用于生产。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-25
  • 1970-01-01
  • 1970-01-01
  • 2014-03-12
相关资源
最近更新 更多