2016-03-31 25 views
0

デスクトップアプリケーションのライセンス認証を行うために、SHA1暗号化を使用してECDSAを使用しています。そのためには、私はPCの情報を与えるPHPサーバを使用し、サーバは私に公開鍵を与え、次にC#でデータを検証したいと思います。cryptographicexceptionパラメータが正しくありません

私はPHPで、この公開鍵生成:

byte[] GetBytesFromPEM(string pemString, string section) 
{ 
    var header = String.Format("-----BEGIN {0}-----", section); 
    var footer = String.Format("-----END {0}-----", section); 

    var start = pemString.IndexOf(header, StringComparison.Ordinal) + header.Length; 
    var end = pemString.IndexOf(footer, start, StringComparison.Ordinal) - start; 

    if (start < 0 || end < 0) 
    { 
     return null; 
    } 

    return Convert.FromBase64String(pemString.Substring(start, end)); 
} 

:私は手順がある。この

byte[] thePublicKeyToBytes = GetBytesFromPEM(thePublicKey2, "PUBLIC KEY"); 
CngKey dsaKeyPublic2 = thePublicKeyToBytes.ToPublicKeyFromBlob(); 

byte[] theRestToBytes = GetBytes(theRestInBinary); 
byte[] meinData = GetBytes("Blabla"); 

using (var ecdsa = new ECDsaCng(dsaKeyPublic2) { HashAlgorithm = CngAlgorithm.Sha1 }) // verify DSA signature with public key 
{ 
    if (ecdsa.VerifyData(meinData, theRestToBytes)) MessageBox.Show("Signature verified."); 
    else MessageBox.Show("Signature verification failed."); 
} 

に取得するには、ここhttp://securitydriven.net/inferno/からコードを使用

"-----BEGIN PUBLIC KEY----- 
MDIwEAYHKoZIzj0CAQYFK4EEAAYDHgAEKzL3PFVVo3IWftdEYmwiSO/4zULGM/wB 
8BrLjQ== 
-----END PUBLIC KEY-----"; 

を問題は、私はこの行でこの例外 "cryptographicexceptionパラメータが間違っています"を得ることです:

CngKey dsaKeyPublic2 = thePublicKeyToBytes.ToPublicKeyFromBlob(); 

私は地獄の公開鍵を表示することはできませんが、私は彼らのキーの長さが384であることを見た私はそれが間違ってやっているところ、このですか?生成された公開鍵の長さ?

答えて

1

公開鍵は52バイトで、短すぎます。どのようにそれを生成していますか?
ToPublicKeyFromBlob()メソッドはreturn CngKey.Import(byteArray, CngKeyBlobFormat.EccPublicBlob)のショートカットです.Eccベースのキーと.NETで生成されたキーでのみ機能します。 Infernoは、P384カーブでECCキーを使用します。つまり、各公開キーは、48バイト×2 = 96バイトと8バイトのヘッダーバイト(here)を合計104バイト使用します。

+0

鍵は、secp112r1 curbを使用してPHPアルゴリズムによって生成されました。 Infernoはそのタイプのキーをサポートしていますか? –

0

Andrei、Infernoは、NIST P-384カーブのみを使用します。さらに重要なのは、.NETフレームワークでサポートされている唯一の曲線は、P-256、P-384、およびP-521です。

関連する問題