我希望设置一个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时我们总是会遇到同样的错误。
答案 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指定填充时起作用。