
我已经玩了几天了,我没有走得太远.我一直在使用X509Certificate和RSACryptoServiceProvIDer类.首先,我尝试从X509Certificate类中获取公钥和签名.我能够获得公钥而不是签名.接下来,我尝试解析构成证书的二进制数据,这允许我获取签名(以及我想要的任何其他数据),但我无法使用RSACryptoServiceProvIDer解密签名.我试过这样的事情,但在我试图解密的时候不断得到说“Bad Key”的异常:
RSAParameters rsaParams = new RSAParameters();rsaParams.Exponent = exp;rsaParams.Modulus = mod;RSACryptoServiceProvIDer rsaServ = new RSACryptoServiceProvIDer();rsaServ.importParameters(rsaParams);byte[] decryptedSig = rsaServ.Decrypt(encryptedSig,false);
任何建议将不胜感激.
编辑:
我尝试了一些似乎更好的东西,但却返回了一个奇怪的结果.我在这里使用X509Certificate2类,因为它更容易进行测试,但我需要稍后切换到.NetCF的X509Certificate.我认为RSACryptoServiceProvIDer.VerifyData可能就是我所需要的.我尝试了以下代码.
X509Certificate2 cert = new X509Certificate2(certBytes);X509Certificate2 certCA1 = new X509Certificate2(@"C:\certs\certCA1.cer");byte[] encryptedSig = new byte[256];Array.copy(certBytes,certBytes.Length - 256,encryptedSig,256);RSACryptoServiceProvIDer rsa = (RSACryptoServiceProvIDer)certA1.PublicKey.Key;bool good = rsa.VerifyData(cert.RawData,"1.3.14.3.2.26",encryptedSig);
正如我所说,我能够手动解码和解释证书的二进制数据,所以我很确定cert.RawData是证书的签名数据,最后256个字节是加密签名.字符串是我从证书中获得的哈希算法的OID,但我并不是100%确定它是正确的. VerifyData返回false,但我不知道为什么.
思考?
解决方法 这是我的代码.RSACryptoServiceProvIDer rsa = signingCertificate_GetPublicKey();return rsa.VerifyData( SignedValue(),CryptoConfig.MapnameToOID( "SHA1" ),Signature() );RSACryptoServiceProvIDer signingCertificate_GetPublicKey(){ RSACryptoServiceProvIDer publicKey = new RSACryptoServiceProvIDer(); RSAParameters publicKeyParams = new RSAParameters(); publicKeyParams.Modulus = GetPublicKeyModulus(); publicKeyParams.Exponent = GetPublicKeyExponent(); publicKey.importParameters( publicKeyParams ); return publicKey;}byte[] GetPublicKeyExponent(){ // The value of the second TLV in your Public Key}byte[] GetPublicKeyModulus(){ // The value of the first TLV in your Public Key}byte[] SignedValue(){ // The first TLV in your Ceritificate}byte[] Signature(){ // The value of the third TLV in your Certificate} 我希望这有助于解决这个问题的任何人.
总结以上是内存溢出为你收集整理的如何使用Compact Framework在C#中验证X.509证书全部内容,希望文章能够帮你解决如何使用Compact Framework在C#中验证X.509证书所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)