2011-10-30 5 views
4

私は共同のC#への.pemキーをインポートしようとしています、と私はそれを行うライブラリ、見つけた:BouncyCastle誰か私にBouncyCastleを使って.pem Public DSAキーをC#にインポートする例を教えてもらえますか?

を私は公開鍵をロードするコードを、作成したとにデータをロードすることになっていますDSACryptoServiceProvider:

 DSA dsa; 

     using (StreamReader rdr = new StreamReader(@"pubkey.pem")) 
     { 
      PemReader pr = new PemReader(rdr); 
      DsaPublicKeyParameters o = pr.ReadObject() as DsaPublicKeyParameters; 
      CspParameters prm = new CspParameters(13); 
      prm.Flags = System.Security.Cryptography.CspProviderFlags.UseMachineKeyStore; 
      //o.Parameters. 
      dsa = new DSACryptoServiceProvider(prm); 
      DSAParameters dp = new DSAParameters(); 
      dp.G = o.Parameters.G.ToByteArray(); 
      dp.P = o.Parameters.P.ToByteArray(); 
      dp.Q = o.Parameters.Q.ToByteArray();     
      dp.Y = o.Y.ToByteArray(); 

      if (o.Parameters.ValidationParameters != null) 
      { 
       dp.Counter = o.Parameters.ValidationParameters.Counter; 
       dp.Seed = o.Parameters.ValidationParameters.GetSeed(); 
      } 

      //todo: missing: J, X? 
      dsa.ImportParameters(dp); 
     } 

dsa.ImportParameters(dp)でクラッシュします。次の例外があります。暗号例外:不正なデータ。

これを機能させるには、何を変更する必要がありますか?

答えて

2

あなたは、私が `ToByteArrayUnsignedで上記のコードを試してみましたそれ以外のバイト配列表現はすべてを壊す先行ゼロのバイトで終わる例:)

+0

があるとして、代わりに1 ToByteArray無地のToByteArrayUnsignedメソッドを使用する必要があります() 'が代用されていますが、私はまだ' CryptographicException:Bad Data'を持っています。 '' J''と '' X''に何らかの値を入れる必要がありますか? – cytinus

+0

新しいCspParametersオブジェクトに '3'を渡して、それがとにかく役立つかどうかを確認してください。 Worth a go :) Jはdiffie-hellman鍵交換に関連しているようですので、署名をしているだけでは必要ありません。 – tyranid

関連する問題