如何通过命令行使用password参数对openssl进行解密


54

因此,通过命令行参数传递密码不是最安全的做法。就是说,openssl的文档使我困惑如何将密码参数传递给openssl命令。

这就是我想要做的

openssl aes-256-cbc -in some_file.enc -out some_file.unenc -d

然后,这提示输入解密密钥。如果我只是想将密码提供给命令而不尝试将密码回显到文件中,那么我搜索了openssl文档和互联网,以尝试找到答案。我尝试添加-pass:somepassword以及-pass somepassword带引号和不带引号均无济于事。

我终于找到答案了,并且在其他论坛上看到人们也有类似的问题,所以我想在这里为社区发布我的问题和答案。

注意:我使用的是openssl版本0.9.8y

Answers:


108

该文档对我来说不是很清楚,但是它有答案,挑战在于无法看到示例。

方法如下:

openssl aes-256-cbc -in some_file.enc -out some_file.unenc -d -pass pass:somepassword

请注意,命令行命令语法始终-pass后跟一个空格,然后是您提供的密码短语的类型,即pass:普通密码短语,然后是冒号后面没有空格的实际密码短语。

此外,文档还指定您可以通过执行以下操作来提供其他密码短语来源:

  • env:somevar 从环境变量获取密码
  • file:somepathname 从文件的第一行获取密码 pathname
  • fd:number 从文件描述符号获取密码。
  • stdin 从标准输入中读取

现在,我已经写了这个问题和答案,这一切似乎都很明显。但是,肯定花了一些时间,我也看到其他人也花了类似的时间,因此希望这可以减少时间并为其他人更快地回答!:)

在OpenSSL 1.0.1e中,要使用的参数是-passin-passout。因此,此示例为:

openssl aes-256-cbc -in some_file.enc -out some_file.unenc -d -passin pass:somepassword


使用passin或passout有什么区别?- 哈!只是查了一下,当然是stdin vs stdout!
dtmland

请注意,适用于大多数 openssl命令(而不仅仅是enc)的密码选项的文档位于openssl(1)的手册页中,也位于Web上的 “ OPTIONS”下。但是我不相信您关于-passin / out的最后一点;其他 openssl类似的命令也rsa dsa ec pkey pkcs8 pkcs12 req ca确实使用了这些命令,但是在我看到的每个版本中,都包括直接从上游源代码构建的1.0.1e enc用法-pass-k -kfile文档(在enc联机帮助页上)。
dave_thompson_085

怎么样的openssl dgst命令?您如何在命令行输入密码呢?
frakman1

4
btw -passin用于提供输入证书的密码,并-passout用于新生成的证书
drmad

7

我在示例中使用-passin-passout设置了两个文件的密码:

openssl pkcs12 -in voip.p12 -out voip.pem -passin pass:123 -passout pass:321

其中,123321是密码


5

目前,Ubuntu 14.04 LTS带有openssl 1.0.1f-1ubuntu2.16

在此版本中,要使用的参数是 -k

例:

openssl enc -aes-256-cbc -e -in some_file.unenc -out some_file.enc -k somepassword

1
在您的示例中,-k是openssl'enc'命令(尝试man enc)可用的选项,它不是常规选项。如果您看一眼,man openssl会在“通过短语选项”标题下看到常规选项。pass:passwordenv:varfile:pathnamefd:numberstdin,如在较早的响应提及。
sibaz
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.