0

少し問題があります。証明書の整合性を検証したい。

だから私はこのコードをやった:

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 signatureLikeInteger = "";

bool verif = false;

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

signatureLikeInteger = certificatEnCours.Thumbprint;

data = Convert.FromBase64String(signatureLikeInteger);

// ------------- 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です。

4

1 に答える 1

1

ここには実際の質問はありません。verif の初期値を無条件に無視しているのは正しいです。さらに重要なこととして、検証を行うために X509Certificate2 を使用することを検討しましたか?:

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

これは、車輪を再発明するよりも賢明だと思います。

編集:証明書のチェーンを検証している場合は、X509Chain、特に ChainStatus プロパティを使用する必要がある思います。

于 2009-06-19T09:25:23.187 に答える