Conoscendo poco della crittografia, ho grossi problemi con quello che sembra essere un compito semplice.Come verificare i dati rispetto alla firma con una chiave pubblica che utilizza sha1ecdsa?
Ho certificato .pem, byte di dati e firma di tali dati. Voglio verificare se qualcuno ha modificato i dati abbinandolo alla firma.
La mia prova:
private bool VerifySignature(byte[] data, byte[] signature)
{
try
{
X509Certificate certificate = new X509Certificate("cert_filename.pem");
if (certificate == null)
return false;
DSACryptoServiceProvider dsa = (DSACryptoServiceProvider)certificate.PublicKey.Key;
return dsa.VerifyData(data, signatureData);
}
catch
{
return false;
}
}
Ma mi dà un errore
'algoritmo di chiave certificati non è supportato' (System.NotSupportedException).
Guardando nel certificato caricato si dice che l'algoritmo della firma è 'sha1ecdsa'.
Sto provando solo a verificare i dati contro la firma. Cosa mi manca qui? Mi piacerebbe farlo senza soluzioni esterne in quanto sembra un compito davvero banale.
Update: Sto cercando di ottenere stessa funzionalità in seguito codice Java:
private boolean verify(byte[] data, byte[] signature)
{
boolean isLicenseCorrect = false;
Signature sig = Signature.getInstance("SHA1WithECDSA");
sig.initVerify(certificate.getPublicKey());
sig.update(data);
return sig.verify(signature);
}
come per ur aggiornamento se si desidera convertire il codice Java in C# [link] (http://dotnetslackers.com/articles/security/Hashing_MACs_and_Digital_Signatures_in_NET.aspx) questo potrebbe aiutare a dare un'occhiata –