2012-08-07 140 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

相關問題