2014-02-25 38 views
5

我有生成密鑰對使用BC如下Java代碼:生成密鑰對使用充氣城堡

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庫。我已經寫爲:

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#中執行相同的操作。

有沒有解決方法?

回答

6

使用私鑰以下代碼:

PrivateKeyInfo pkInfo = PrivateKeyInfoFactory.CreatePrivateKeyInfo(keyPair.Private); 
String privateKey = Convert.ToBase64String(pkInfo.GetDerEncoded()); 

,並按照公衆:

SubjectPublicKeyInfo info = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(keyPair.Public); 
String publicKey = Convert.ToBase64String(info.GetDerEncoded()); 
+0

我是從其他blog.Anyways感謝名單。 – Vaibhav

+12

你至少可以發佈博客鏈接:/ –

+0

命名空間: Org.BouncyCastle.Asn1.Pkcs.PrivateKeyInfo,Org.BouncyCastle.Pkcs.PrivateKeyInfoFactory,Org.BouncyCastle.Asn1.X509.SubjectPublicKeyInfo,Org.BouncyCastle.X509.SubjectPublicKeyInfoFactory –