我希望设置一个 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 旧方法不起作用,而新方法可以。


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!