【发布时间】: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