2013-05-14 4 views
5

年齢別にANY MEANSによってファイルからECCキーをインポートする方法を探しています。 Windows証明書ストア、.p12ファイル、およびPKCS#8 OpenSSLキーファイルからECC証明書にアクセスしようとしましたが、成功しませんでした。私が試してみましたたくさんのCNGインポートECC Pub/Priv Keyfromファイル

ただ一つは次のとおりです。

StreamReader fs = new StreamReader("key.pem"); 
String key = fs.ReadToEnd(); 
byte[] tempkey = System.Text.Encoding.ASCII.GetBytes(key); 
CngKey cngKey = CngKey.Import(tempkey, CngKeyBlobFormat.Pkcs8PrivateBlob); 

しかし、誰discriptiveエラーメッセージが与えられていない、それだけで最後の行のいずれかinvalid parametersを持っているか、An error occurred during encode or decode operation.

上記のコードの場合、

私はMSDNのECDHのsample programを使用しており、altered itはAESのGCMモードを使用しています。 Microsoftの例では、実行時にデフォルトで作成されたECCキーの代わりに、事前に生成されたECCキーを試してみるまで、これはうまく動作します。私は無作為にCngKeyBlobFormatのすべてを試しましたが、正式には、それらの特定のフォーマットが生データにどのように見えるかわからないので、私はそれを非常にうまくデバッグできません。

私のキーは、しかし、私が動作する任意の形式を使用して喜んで、次の形式である(.P12を、マイクロソフトストア、PKCS#8など)

key.pem

-----BEGIN EC PARAMETERS----- 
############################## 
-----END EC PARAMETERS----- 
-----BEGIN EC PRIVATE KEY----- 
############################## 
-----END EC PRIVATE KEY----- 

リソース

MSDN API and Example: ECDiffieHellmanCng Class

MSDN API: CngKey Class

MSDN Blogs: AES GCM Mode

OpenSSL - Creating ECC keys

答えて

0

これが唯一の問題ではないかもしれないが、あなたは、単にASCII PEMファイルをエンコードすることはできませんし、それは、PKCS#8エンコードされたブロブであるとして機能します。 PKCS#8は、通常はBER/DERでエンコードされたASN.1で指定されています。 PEMベース64は、このバイナリ符号化を符号化し、符号化されたデータのタイプを示すために、ベース64の周りにヘッダおよびフッタを置く。

エンコードされたパラメータはスキップする必要があります。うまくいけば、これらのパラメータは秘密鍵の符号化に存在することが望ましくあります。

+0

残念ながら、CNGにこのような鍵をインポートさせるのはまだ難しいかもしれません。もしうまくいかない場合は、PEM形式(およびPKCS#8形式のキー部分)あなた自身。 –