【发布时间】:2020-07-29 04:33:36
【问题描述】:
我想使用 .net 框架(不是 .netcore)加载 PEM
-----BEGIN ENCRYPTED PRIVATE KEY-----
MIHs........................................................CAAw
DAYI........................................................gZAf
Y/Iu........................................................X7DZ
ZKoE........................................................OYQQ
3ZST........................................................A2E=
-----END ENCRYPTED PRIVATE KEY-----
- 我尝试在 BouncyCastle 中使用以下代码,但它会抛出 PemException: “创建加密私钥时出现问题:Org.BouncyCastle.Crypto.InvalidCipherTextException:垫块损坏”
class Passowrd : IPasswordFinder
{
private string v;
public Passowrd(string v)
{
this.v = v;
}
public char[] GetPassword()
{
return v.ToCharArray();
}
}
var pemReader = new PemReader(new StringReader(privateKeyText), new Passowrd("PASSWORD"));
var pemObj = pemReader.ReadObject(); // this line throw PemException
- 但是,我使用 .netcore3.1 通过以下代码加载完全相同的 PEM 文件:
var ecdsa = ECDsa.Create();
ecdsa.ImportEncryptedPkcs8PrivateKey(passSpan, privateKeyBytes, out _);
【问题讨论】:
-
嗯,我无法在 .NET Framework 4.7.2 上重现该问题。此错误消息是例如如果密码不正确或
IPasswordFinder实现有错误,则会显示。请发布您的Passowrd-Implementation。 -
感谢您的帮助,我已经添加了密码实现。
-
该代码适用于我(.NET Framework 4.7.2)。可能是密码打错了?您使用的是哪个 .NET Framework 版本?
-
密码肯定是正确的,我在 .netcore 代码中使用了完全相同的密码并且它可以工作。你用的是什么版本的“充气城堡”?我正在使用
-
我使用的是 1.8.5。如果发布的密钥的密码确实是 PASSWORD,那么我可以重现该问题。然后这个特定键似乎存在问题,因为它可以使用其他键。我去看看钥匙。
标签: c# bouncycastle ecdsa pkcs#8