运行 Base64 命令在终端中有效,但在 bash 脚本中无效。试图解密 AES 256 加密字符串

Running Base64 command works in terminal but not in bash script. Trying to decypher an AES 256 encrypted string

我正在尝试使用 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

但是这个命令 returns 是一个错误,

error reading input file

所以我尝试使用 -A-a 而不是 -base64但是两个命令 returns 错误的幻数 .

找了一会发现需要先解码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

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

之前放置一个反斜杠

我是这样知道的:

$ 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: