SHA1 şifrelemeli ECDSA kullanıyorum çünkü bir masaüstü uygulaması için lisans etkinleştirme yapmaya çalışıyorum. Bunun için bilgisayar bilgisi verdiğim bir PHP sunucusu kullanıyorum ve sunucu bana genel anahtarı veriyor ve ardından C# içindeki verileri doğrulamak istiyorum. cryptographicexception Parametre hatalı
PHP bu ortak anahtar oluşturulan: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));
}
: Prosedür nerede olduğunu bu
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.");
}
almak için http://securitydriven.net/inferno/ buradan kod kullanılmış
"-----BEGIN PUBLIC KEY-----
MDIwEAYHKoZIzj0CAQYFK4EEAAYDHgAEKzL3PFVVo3IWftdEYmwiSO/4zULGM/wB
8BrLjQ==
-----END PUBLIC KEY-----";
Sorun şu ki bu satırda "cryptographicexception parametrenin yanlış" istisnası var:
CngKey dsaKeyPublic2 = thePublicKeyToBytes.ToPublicKeyFromBlob();
Ben inferno genel anahtarını gösteremez
ama ben yanlış yapıyorum nerede onların anahtarın uzunluğu 384. Bu Is olduğunu gördü? Oluşturulan ortak anahtarın uzunluğu?
Anahtar, bir secp112r1 kaldırımına sahip bir PHP algoritması tarafından oluşturuldu. Inferno bu tür anahtarı destekliyor mu? –