当前位置: 首页 > 知识库问答 >
问题:

使用BouncyCastle在C#中读取DER私钥

姜宏放
2023-03-14
byte[] privatekey = File.ReadAllBytes(@"C:\Users\Luke\privkey.der");
var rsaKeyParameters = (RsaKeyParameters)PrivateKeyFactory.CreateKey(privatekey);

以前有人这么做过吗?谢谢

共有1个答案

梁渊
2023-03-14

问题是我假设PublicKeyFactory和PrivateKeyFactory是互补的,因为它们在同一个命名空间中。他们不是!

为了解码私钥,我需要以下替代代码

var privKeyObj = Asn1Object.FromStream(privatekey);
var privStruct = new RsaPrivateKeyStructure((Asn1Sequence)privKeyObj);

// Conversion from BouncyCastle to .Net framework types
var rsaParameters = new RSAParameters();
rsaParameters.Modulus = privStruct.Modulus.ToByteArrayUnsigned();
rsaParameters.Exponent = privStruct.PublicExponent.ToByteArrayUnsigned();
rsaParameters.D = privStruct.PrivateExponent.ToByteArrayUnsigned();
rsaParameters.P = privStruct.Prime1.ToByteArrayUnsigned();
rsaParameters.Q = privStruct.Prime2.ToByteArrayUnsigned();
rsaParameters.DP = privStruct.Exponent1.ToByteArrayUnsigned();
rsaParameters.DQ = privStruct.Exponent2.ToByteArrayUnsigned();
rsaParameters.InverseQ = privStruct.Coefficient.ToByteArrayUnsigned();
var rsa = new RSACryptoServiceProvider();
rsa.ImportParameters(rsaParameters);
return Encoding.UTF8.GetString(rsa.Decrypt(Convert.FromBase64String(ciphertext), true));

非常感谢猫头鹰的帮助。

 类似资料:
  • 问题内容: 该BouncyCastle的加密API允许创建和使用的常规验证数字签名包对象,如,和它们的容器。 假设我使用OpenSSL创建一个.pem(或更简单的话是一个.der文件),其中包含要在应用程序中使用的椭圆曲线私钥。例如,它看起来像这样: 如何使用BouncyCastle API获取同时包含此私钥和相应公钥的? 请注意,我要使用BouncyCastle 1.50(在撰写本文时为最新)中

  • BouncyCastle加密API允许使用常规的<code>java创建和验证数字签名。安全性包对象,如,及其容器<code>java.security.KeyPair。 假设我使用OpenSSL创建了一个. pem(或者更简单的. der文件),其中包含了我希望在应用程序中使用的椭圆曲线私钥。例如,它看起来像这样: 我如何使用BouncyCastle APIs来获取包含此私钥和相应公钥的< co

  • 正如您所看到的,密钥长度非常不同,并且我用前者创建的P12文件不会导入到Windows证书存储中。我一定是用C#BouncyCastle做错了什么,但看不出是什么(查看PemWriter和其他相关类的源代码并没有指出任何明显的错误)。 任何帮助都将不胜感激。谢了。

  • 在我们的一个应用程序中,私钥使用BouncyCastle的PEMWriter存储。目前,我正在研究我们是否可以摆脱BouncyCastle依赖关系,因为Java7似乎拥有我们需要的一切。唯一的问题是我不能读取存储在数据库中的私钥作为PEM编码的字符串(证书/公钥很好)。 如果我将PEM编码的私钥字符串从数据库保存到一个文件中,我可以运行OpenSSL将密钥转换为PKCS#8格式,如下所示: 我可以

  • 我需要在C#中加密数据,以便将其传递给Java。Java代码属于第三方,但我得到了相关的源代码,因此我决定,由于Java使用Bouncy Castle库,所以我将使用C#端口。 解密工作正常。但是,解密仅在使用私钥使用encrypt时有效,而不是使用公钥。使用公钥时,解密失败,出现。 编辑: 我还添加了一个单元测试,它证明公钥等于从私钥中提取的公钥: