سؤال

وآسف لغتي الإنجليزية.

ولدي مشكلة صغيرة. أريد للتحقق من سلامة بلدي الشهاده.

وأنا جعل هذا الرمز:

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;

// ------------- PART 1 -------------

signatureNumérique = certificatEnCours.Thumbprint;

data = Convert.FromBase64String(signatureNumérique);

// ------------- PART 2 -------------

hash = sha1.ComputeHash(certificatEnCours.RawData);

keyPublic = rsaAlgo.ToXmlString(false);

csp = new RSACryptoServiceProvider();

csp.FromXmlString(keyPublic);

// ------------------------------

verif = csp.VerifyData(hash, CryptoConfig.MapNameToOID("SHA1"), data);

ولكن لدي بالفعل قيمة "false" من أجل "verif" فار

هل كانت مفيدة؟

المحلول

وليس هناك شك الفعلي هنا. أنت محق أنك دون قيد أو شرط تجاهل القيمة الأولية verif. الأهم من ذلك، هل تعتبر استخدام X509Certificate2 للقيام التحقق:؟

X509Certificate2 x2 = new X509Certificate2(certificatEnCours);
bool verif = x2.Verify();

وأعتقد أن هذا هو أكثر حكمة من إعادة اختراع العجلة.

وتحرير: إذا كنت التحقق من سلسلة شهادات أعتقد أنك تريد استخدام <لأ href = "http://msdn.microsoft.com/en-us/library/system.security.cryptography.x509certificates.x509chain. ASPX "يختلط =" noreferrer نوفولو "> X509Chain وعلى وجه الخصوص في ChainStatus الممتلكات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top