2013-09-29 38 views
0

我正试图在C#中导入私钥和公钥。它们都是椭圆曲线secp521。公钥的样子:在C#中导入ECC密钥#

-----BEGIN PUBLIC KEY----- 
MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQA7WeRuZKFy1T3i4kmoNY2xAaWwAu7YI6aZUvWg/Hm 
7Tf+0n7StfGtHlf0jkMLLtjF1Yv1FCKOGlJ+vIt0K1hI9wkA2BjmrjpMUqplBkmRklDOp5TEF9ss 
laaPkr0wWf3WdmwvGTNIP1R3uvbSTEgvI02VS4Bz/f8Z4qzf3ZbAsBcLzBc= 
-----END PUBLIC KEY----- 

试图用进口:

pubkey = pubkey.Substring(27, pubkey.Length-27-25); // remove wrapping 
byte[] pkcs8Blob = Base64.Decode(pubkey); 
CngKey k = CngKey.Import(pkcs8Blob, CngKeyBlobFormat.EccPublicBlob); 

但是,这给我的错误“参数不正确”,仅此而已。任何人有一个想法,如何解决这个问题?

更新: 意识到这是只有私钥是PKCS8所以现在这个尝试:

X509Certificate cert = new X509Certificate(pkcs8Blob); 

在java中,它的完成这样的:

X509EncodedKeySpec spec = new X509EncodedKeySpec(pkcs8Blob); 
KeyFactory fact = KeyFactory.getInstance(algorithm, "SC"); 
ECPublicKey pubKey = (ECPublicKey) fact.generatePublic(spec); 
+0

当您在调试器中查看它时,pubkey是否有回车符? – yhw42

+0

不是在“解包器”之后 – user1930848

回答

0

如果没有\n在然后开始更改:

pubkey = pubkey.Substring(27, pubkey.Length-27-25); 

to this:

pubkey = pubkey.Substring(26, pubkey.Length-26-25); 

27第一个字符被截断。

+0

然后它不能被base-64解码。 – user1930848

+0

@ user1930848我忘记了第二个参数。现在试试。 – BartoszKP

+0

“参数不正确。” :( – user1930848