我希望设置一个 PowerShell 脚本来解密在 Linux 环境中使用 OpenSSL 使用证书公钥加密的 secret 。
带有用于解密的私钥的证书位于 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 时总是遇到同样的错误。
请您参考如下方法:
openssl rsautl
,没有 -oaep
标志,执行 PKCSv1_1.5 填充,这对应于 中的
您正在调用的方法。false
值>Decrypt
切线:如果您可以在 powershell 范围内访问 .NET 4.6 API,您可以通过将 cert.PrivateKey
转换为 RSACryptoServiceProvider
来调用 cert.GetRSAPrivateKey()
并使用较新的 RSA.Decrypt(data, RSAEncryptionPadding.Pkcs1)
。有些证书/ key 旧方法不起作用,而新方法可以。