使用 Bouncy Castle 生成密钥对 [英] Generating keyPair using Bouncy Castle

查看:96
本文介绍了使用 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));

现在我想在 C# 中使用 BC 做同样的事情.我已经通过 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#.

有什么解决办法吗?

推荐答案

私钥使用如下代码:

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 生成密钥对的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆