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