尝试加密文件&使可执行使用openssl。找到一个有趣的链接,适合我的问题与一个问题。即"我必须通过openssl命令中用于加密的密码";这是结果错误。
写你的脚本(script-base.sh)#!/bin/sh
echo "Hello World"
加密你的脚本(给一个密码):foobar
是我的密码
openssl enc -e -aes-256-cbc -a -in script-base.sh > script-enc
写de Wrapper (script-final.sh):
#!/bin/sh
openssl enc -d -aes-256-cbc -a -in script-enc | sh -passin pass:foobar
运行"script-final.sh"我在控制台
中看到以下错误enter aes-256-cbc解密密码:bad password read
虽然下面的代码工作,但它是废弃的
openssl enc -d -aes-256-cbc -a -in script-enc -k foobar | sh -
使用时抛出以下错误
***警告:使用已弃用的密钥派生。使用-iter或-pbkdf2会更好。坏解密
…[]已弃用:
openssl enc -d -aes-256-cbc -a -in script-enc -k foobar | sh -
在这种情况下,您将-k foobar
作为openssl enc -d
命令的选项,因此它被用作解密的密码,这是成功的,因为您实际上使用foobar
作为密码进行加密(以及相同的密码和默认的KDF)。
openssl enc -d -aes-256-cbc -a -in script-enc | sh -passin pass:foobar
[给出]
enter aes-256-cbc解密密码:bad password read
在这里,您没有将-passin pass:foobar
作为openssl
的选项,而是将其作为shell的选项,这是管道的第二个组件。由于您没有将密码作为参数提供给openssl,而它是必需的,因此openssl提示您输入密码,但是您没有提供有效的输入(可能输入control-D或类似的输入),因此它失败了。如果你这样做
openssl enc -d -aes-256-cbc -a -in script-enc -passin pass:foobar | sh
它将与-k
版本完全相同,除了在脚本中占用更多空间。
确实,openssl enc
长期使用的密钥派生(并且仍然默认)非常差和弱,并且几十年来一直受到广泛批评;OpenSSL 1.1.1(发布于2018年,在您链接到的答案日期之后)和up最终提供了一个更好的-pbkdf2
方法,并警告使用旧方法。但是,您应该注意加密方面的警告,而不是解密;一旦使用这种糟糕的方法进行了加密,就必须使用它进行解密(并遭受警告)。还请注意,正如我在那个链接中所评论的,OpenSSL 1.1。X(和3.0)与早期版本不兼容,因此,如果您或任何人(如您的用户)希望在运行旧软件的系统上运行此功能,它将失败。
或者,可以考虑使用一开始就设计得很好的东西,比如GPG, Gilles在回答同样的问题(早在一年前)时就推荐了GPG。尽管GPG(取决于版本)使得在命令行上提供密码变得不那么方便,因为这通常会让它被泄露——但在您的情况下,您已经自己泄露了它,因此GPG为您提供安全性的尝试是浪费的。