2017-07-19 7 views
0

Ich möchte eine ECDSA AsymmetricCipherKeyPair, die ich im Hexadezimalformat erzeuge. Sowohl die öffentlichen als auch die privaten Schlüssel.C# - AsymmetricCipherKeyPair zu hexadezimal

Jetzt mache ich das:

//Generate key pair 
ECKeyPairGenerator gen = new ECKeyPairGenerator("ECDSA"); 
SecureRandom secureRandom = new SecureRandom(); 
KeyGenerationParameters keyGenParam = new KeyGenerationParameters(secureRandom, keySize); 
gen.Init(keyGenParam); 
AsymmetricCipherKeyPair keys = gen.GenerateKeyPair(); 

//Create a PEM and then extract the BASE64 part 
var key = keys.Private; 
TextWriter textWriter = new StringWriter(); 
PemWriter pemWriter = new PemWriter(textWriter); 
pemWriter.WriteObject(key); 
pemWriter.Writer.Flush(); 
string pem = textWriter.ToString(); 
var pem2 = pem.Split('\r').Skip(1).TakeWhile(i => !i.Contains("-----")).ToArray(); 
pem = string.Join("",pem2); 

//BASE64 to byte[] to hex 
byte[] bytes = Convert.FromBase64String(pem); 
string hex = BitConverter.ToString(bytes); 

Es muss ein einfacher Weg, um die hexadezimale Ausgabe zu erhalten.

Antwort

1

für den privaten Schlüssel:

bytes = Org.BouncyCastle.Pkcs.PrivateKeyInfoFactory.CreatePrivateKeyInfo(keys.Private).ParsePrivateKey().GetDerEncoded(); 

und die Öffentlichkeit:

bytes = Org.BouncyCastle.X509.SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(keys.Public).GetDerEncoded();