4

.pem ファイルで提供された公開鍵で署名を検証するにはどうすればよいですか?

私は流れるコードを使用します:

RSACryptoServiceProvider CrRsa;

var reader21 = File.OpenText(@"C:GTLpublicKey.pem");
var x = new PemReader(reader21);
var y = (RsaKeyParameters)x.ReadObject();

CrRsa = (RSACryptoServiceProvider)RSACryptoServiceProvider.Create();
RSAParameters pa = new RSAParameters();
pa.Modulus = y.Modulus.ToByteArray();
pa.Exponent = y.Exponent.ToByteArray();
CrRsa.ImportParameters(pa);

yを返しnull、次の場所でエラーが発生しますpa.Modulus = y.Modulus.ToByteArray();

4

3 に答える 3

7
RSACryptoServiceProvider RSAVerifier = new RSACryptoServiceProvider();

//Read public Key From Text File.

StreamReader PubKeyReader = File.OpenText(txtPublicKeyFile.Text);

string publicKey = PubKeyReader.ReadToEnd();

//Adding public key to RSACryptoServiceProvider object.

RSAVerifier.FromXmlString(publicKey);

//Reading the Signature to verify.

FileStream Signature = new FileStream(txtVerifySign.Text, FileMode.Open, FileAccess.Read);

BinaryReader SignatureReader = new BinaryReader(Signature);

byte[] SignatureData = SignatureReader.ReadBytes((int)Signature.Length);

//Reading the Signed File for Verification.

FileStream Verifyfile = new FileStream(txtVerifyFile.Text, FileMode.Open, FileAccess.Read);

BinaryReader VerifyFileReader = new BinaryReader(Verifyfile);

byte[] VerifyFileData = VerifyFileReader.ReadBytes((int)Verifyfile.Length);

//Comparing.

bool isValidsignature = RSAVerifier.VerifyData(VerifyFileData, "SHA1", SignatureData);

if (isValidsignature)

{

      Signature.Close();

      Verifyfile.Close();

}

else

{


    Signature.Close();

    Verifyfile.Close();

}
于 2012-08-09T13:38:43.010 に答える
3

私は提案された答えに同意しません。

RSACryptoServiceProvider は、「FromXMLString」を介して PEM ファイルを読み取ることができません。

しかし、PEM ファイルを XML にエクスポートするというアイデアが浮かびました。

オンライン変換を行うこのサイトを見つけました

その後、それは完全に機能しました!

于 2015-03-08T14:39:18.327 に答える
0

確かではありませんが、おそらくバックスラッシュを忘れたことが問題です:

var reader21 = File.OpenText(@"C:\GTLpublicKey.pem");
//                               ^
于 2012-08-07T14:07:07.160 に答える