デスクトップアプリケーションのライセンス認証を行うために、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であることを見た私はそれが間違ってやっているところ、このですか?生成された公開鍵の長さ?
鍵は、secp112r1 curbを使用してPHPアルゴリズムによって生成されました。 Infernoはそのタイプのキーをサポートしていますか? –