如何在命令行中使用密码参数到 openssl 进行解密

Dav*_*lpy 87 linux command-line openssl

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

这就是我想要做的

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

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

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

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

Dav*_*lpy 157

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

这是如何做到的:

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,要使用的参数是-passinor -passout。所以这个例子是:

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

  • btw `-passin` 用于为输入证书提供密码,`-passout` 用于新生成的证书 (9认同)

小智 21

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

openssl pkcs12 -in voip.p12 -out voip.pem -passin pass:123 -passout pass:321
Run Code Online (Sandbox Code Playgroud)

其中,123321是密码


小智 6

此时 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
Run Code Online (Sandbox Code Playgroud)

  • 在您的示例中, -k 是 openssl 'enc' 命令(尝试 `man enc`)可用的一个选项,它不是一个通用选项。如果您查看“man openssl”,您将在“Pass Phrase Options”标题下看到一般选项;`pass:password`、`env:var`、`file:pathname`、`fd:number` 或 `stdin`,如之前的回复中所述。 (2认同)