1

C# で秘密および公開署名キーをインポートしようとしています。どちらも楕円曲線のsecp521です。公開鍵は次のようになります。

-----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);
4

1 に答える 1

0

最初にno がない場合は\n、次のように変更します。

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

これに:

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

最初の27文字が途切れます。

于 2013-09-29T17:43:38.977 に答える