2012-08-07 138 views
2

如何使用.pem文件中提供的公钥验证签名?如何使用.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
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(); 

} 
+0

用于签名的证书的公钥将被保存并稍后用于验证。 – Sreegth 2012-08-09 13:40:33

0

不知道,但可能是你忘了backsslash问题:

var reader21 = File.OpenText(@"C:\GTLpublicKey.pem"); 
//        ^
+0

var reader21 = File.OpenText(@“C:GTLpublicKey.pem”);工作正常 – Sreegth 2012-08-07 14:10:52

+0

var y =(RsaKeyParameters)x.ReadObject(); 我不知道为什么这部分返回一个空值。 – Sreegth 2012-08-07 14:12:30

+0

我认为问题在于文件不存在,是由于缺少反斜杠导致的。正常的文件名不能包含':'符号。为驱动器名称保留的AFIK。 – rekire 2012-08-07 14:13:48

0

问题出在公钥文件上.PemReader查找开始字符串'----- BEGIN PUBLIC KEY'和结束字符串'----- END PUBLIC KEY'.I检索我的公用密钥使用OpenSSl命令和保存该密钥作为.pem文件。现在它工作。

+0

尝试使用它。 – Sreegth 2012-08-09 05:14:43

2

我不同意提出的答案。

RSACryptoServiceProvider无法通过“FromXMLString”读取PEM文件。

但是,它给了我将PEM文件导出到XML的想法。

我发现这个网站that makes the online conversion

然后,它完美地工作!

+0

林不知道它回答了这个问题,但它是一个很好的资源 – 2015-03-08 14:42:45

相关问题