我正在寻找设置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 回答
openssl rsautl
,没有-oaep
标志,执行PKCSv1_1.5填充,它对应于您正在调用的Decrypt
方法中的false
值 .Tangentally:如果您可以在PowerShell范围内访问.NET 4.6 API,则可以通过将
cert.PrivateKey
更改为RSACryptoServiceProvider
并调用cert.GetRSAPrivateKey()
并使用更新的RSA.Decrypt(data, RSAEncryptionPadding.Pkcs1)
来更好地服务 . 有旧方法不起作用的证书/密钥,以及新方法 .$ mycert.PrivateKey.Decrypt($ bytes,$ false)在使用OpenSSL的加密命令中没有指定填充时起作用 .