首页 文章

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

提问于
浏览
0

我正在寻找设置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

    openssl rsautl ,没有 -oaep 标志,执行PKCSv1_1.5填充,它对应于您正在调用的 Decrypt 方法中的 false 值 .

    Tangentally:如果您可以在PowerShell范围内访问.NET 4.6 API,则可以通过将 cert.PrivateKey 更改为 RSACryptoServiceProvider 并调用 cert.GetRSAPrivateKey() 并使用更新的 RSA.Decrypt(data, RSAEncryptionPadding.Pkcs1) 来更好地服务 . 有旧方法不起作用的证书/密钥,以及新方法 .

  • 0

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

相关问题