1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
|
using System.Security.Cryptography;
using System.Runtime.InteropServices;
using System.Security.Cryptography.X509Certificates;
SHA1Managed sha1 = new SHA1Managed();
RSACryptoServiceProvider csp = null;
AsymmetricAlgorithm rsaAlgo = certificatEnCours.PublicKey.Key;
byte[] data = null;
byte[] hash = null;
string keyPublic = "";
string signatureNumérique = "";
bool verif = false;
// ------------- PARTIE 1 -------------
// On récupère l'empreinte numérique
signatureNumérique = certificatEnCours.Thumbprint;
//data = System.Text.Encoding.Unicode.GetBytes(signatureNumérique);
//data = System.Text.Encoding.ASCII.GetBytes(signatureNumérique);
// On convertit l'empreinte numérique en tableau de bytes
data = Convert.FromBase64String(signatureNumérique);
// ------------- PARTIE 2 -------------
// On hashe le contenu du certificat en SHA1
hash = sha1.ComputeHash(certificatEnCours.RawData);
// On convertit la valeur xml de la clé en chaîne de caractère
keyPublic = rsaAlgo.ToXmlString(false);
// On instancie RSACryptoServiceProvider
csp = new RSACryptoServiceProvider();
// On importe la clé publique dans le RSACryptoServiceProvider
csp.FromXmlString(keyPublic);
// ------------- COMPARAISON --------------
// On compare la valeur hashé du contenu du certificat avec
// la signature numérique :
verif = csp.VerifyData(hash, CryptoConfig.MapNameToOID("SHA1"), data); |
Partager