使用Bouncy Castle生成keyPair [英] Generating keyPair using Bouncy Castle
问题描述
我有使用BC生成密钥对的Java代码,如下所示:
I have Java code for generating keypair using BC as follows:
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
keyGen.initialize(1024);
KeyPair key = keyGen.generateKeyPair();
PrivateKey priv = key.getPrivate();
PublicKey pub = key.getPublic();
String privateKey = new String(Base64.encode(priv.getEncoded(), 0,priv.getEncoded().length, Base64.NO_WRAP));
String publicKey1 = new String(Base64.encode(pub.getEncoded(), 0,pub.getEncoded().length, Base64.NO_WRAP));
String publicKey = new String(Base64.encode(publicKey1.getBytes(),0, publicKey1.getBytes().length, Base64.NO_WRAP));
现在,我想使用BC在C#中执行相同的操作.我已经通过nuget软件包管理器下载了WP8BouncyCastle库.我写为:
Now I want to do same in C# using BC. I have downloaded WP8BouncyCastle library via nuget package manager. I have written as:
var kpgen = new RsaKeyPairGenerator();
kpgen.Init(new KeyGenerationParameters(new SecureRandom(new CryptoApiRandomGenerator()), 1024));
var keyPair = kpgen.GenerateKeyPair();
AsymmetricKeyParameter privateKey = keyPair.Private;
AsymmetricKeyParameter publicKey = keyPair.Public;
string prvKey = Convert.ToBase64String(UTF8Encoding.UTF8.GetBytes(privateKey.ToString()));
string pubKey = Convert.ToBase64String(UTF8Encoding.UTF8.GetBytes(publicKey.ToString()));
string pubKey1 = Convert.ToBase64String(UTF8Encoding.UTF8.GetBytes(pubKey.ToString()));
但是我需要Java中可用的 getEncoded()
方法,而C#的BC库中没有此方法.此 getEncoded()
方法用于将给定密钥转换为X.509编码的密钥.对于Java,公钥进行两次转换( getencoded()
和getBytes()
),我无法在C#中做同样的事情.
But I need getEncoded()
method available in Java which is not available in BC library in C#. This getEncoded()
method is used to convert given key into X.509 encoded key.In case of Java, public key getting twice converted (getencoded()
and getBytes()
) ,I am not able to do same in C#.
有什么解决办法吗?
推荐答案
使用以下代码作为私钥:
Use the following code for private key:
PrivateKeyInfo pkInfo = PrivateKeyInfoFactory.CreatePrivateKeyInfo(keyPair.Private);
String privateKey = Convert.ToBase64String(pkInfo.GetDerEncoded());
并关注以下内容:
SubjectPublicKeyInfo info = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(keyPair.Public);
String publicKey = Convert.ToBase64String(info.GetDerEncoded());
这篇关于使用Bouncy Castle生成keyPair的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!