使用x509证书解密使用OpenSSL加密的PowerShell的文本

时间:2017-08-08 19:50:16

标签: powershell ssl encryption openssl

我希望设置一个PowerShell脚本来解密使用OpenSSL在Linux环境中使用证书公钥加密的机密。

具有要在解密中使用的私钥的证书位于Windows本地计算机证书存储区中。

到目前为止,我试图使用 [Security.Cryptography.RSACryptoServiceProvider].PrivateKey.Decrypt解密加密文件中的字节但是填充错误

$mycert.PrivateKey.Decrypt($bytes, $true)
Exception calling "Decrypt" with "2" argument(s): "Error occurred while decoding OAEP padding."
At line:1 char:1
+ $mycert.PrivateKey.Decrypt($bytes, $true)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : CryptographicException

我是否可以获得有关如何解决此加密异常的一些指示?

包含密文的文件是使用Linux中的以下示例openssl命令生成的:

echo " Secret Text" | openssl rsautl -encrypt -inkey publickey.pem -pubin > secret.enc

使用OpenSSL可以很好地解密它,但在尝试使用PowerShell时我们总是会遇到同样的错误。

2 个答案:

答案 0 :(得分:0)

没有openssl rsautl标记的

-oaep会执行PKCSv1_1.5填充,这与您正在调用的false方法中的Decrypt值相对应。

Tangentally:如果您可以在PowerShell范围内访问.NET 4.6 API,则可以通过将cert.PrivateKey转换为RSACryptoServiceProvider更改为调用cert.GetRSAPrivateKey()并使用更新的{{ {1}}。有旧方法不起作用的证书/密钥,以及新方法。

答案 1 :(得分:0)

$ mycert.PrivateKey.Decrypt($ bytes,$ false)在加密命令中没有使用OpenSSL指定填充时起作用。