当前位置: 首页 > 编程语言 > C#

如何将openssl_pkey_get_public和openssl_verify转换为C#.NET分享

时间:2023-04-10 19:58:24 C#

如何将openssl_pkey_get_public和openssl_verify转换为C#.NETPHP代码验证来自银行的iPizza签名:$key=openssl_pkey_get_public(file_get_contents($preferences['bank_certificate']));if(!openssl_verify($data,$signature,$key)){trigger_error("无效签名",E_USER_ERROR);我尝试使用SHA1CryptoServiceProvidersha1=newSHA1CryptoServiceProvider();将其转换为ASP.NET;X509Certificate2cert=newX509Certificate2(HttpContext.Current.Request.MapPath("~/App_Data/bankert.crt"),"");RSACryptoServiceProviderrsaCryptoIPT=newRSACryptoServiceProvider();rsaCryptoIPT.ImportCspBlob(cert.RawData);!rsaCryptoIPT.VerifyData(data,CryptoConfig.MapNameToOID("SHA1"),signature))thrownewInvalidOperationException("Invalidsignaturefrombank");但行rsaCryptoIPT.ImportCspBlob(cert.RawData)抛出Cryptography.CryptographicException无效的提供程序版本:StackTrace:在System.Security.Cryptography.CryptographicException.ThrowCryptogaphicException(Int32小时)在System.Security.Cryptography.Utils._ImportCspBlob(Byte[]keyBlob,SafeProvHandlehProv,CspProviderFlags标志,SafeKeyHandle&hKey)在System.Security.Cryptography.Utils.ImportCspBlobHelper(CspAlgorithmTypekeyType,Byte[]keyBlobBooleanpublicOnly,CspParameters¶meters,BooleanrandomKeyContainer,SafeProvHandle&safeProvHandle,SafeKeyHandle&safeKeyHandle)atSystem.Security.Cryptography.RSACryptoServiceProvider.ImportCspBlob(Byte[]keyBlob)...如何修复?bank_certificate文件包——–开始证书——–MIIDRTCCAq6gAwIBAgIBADANBgkqhkiG9w0BAQQFADB7MQswCQYDVQQGEwJFRTEO….C82uR/wUZJDw9kj+R1O46/byG8yA+S9FVw==—–证书结束—–更新:我根据tyranid回复更改了代码varcert=newX509Certificate2(HttpContext.Current.Request.MapPath("~/App_Data/banksert.crt"),"");varrsaCryptoIPT=(RSACryptoServiceProvider)cert.PublicKey.Key;varsha1=新的SHA1C加密服务提供商();if(!rsaCryptoIPT.VerifyData(data,sha1,signature))thrownewInvalidOperationException("来自银行的无效签名");此代码导致银行异常签名无效检查显示证书数据中的证书对象。我该如何解决这个问题以便验证签名?调试器显示银行证书有效期已过。可能这会导致错误或VerifyDate第二个参数错误。我可以成功签署数据,银行可以使用代码SHA1CryptoServiceProvidersha1=newSHA1CryptoServiceProvider();接受签名。X509Certificate2cert=newX509Certificate2(HttpContext.Current.Request.MapPath("~/App_Data/P12File.p12"),"");RSACryptoServiceProviderrsaCryptoIPT=(RSACryptoServiceProvider)cert.PrivateKey;byte[]binSignature=rsaCryptoIPT.SignData(binData,sha1);验证银行签名应该是这个过程的逆过程,使用相同的算法。如何验证签名?您是否安装了EnhancedCryptographicProvider?事实上,为了不依赖于加密提供者,您可以使用其他库,这些库以本机代码实现所有加密内容。我知道EldoSSecureBlackbox(商业用途)和BouncyCastle(免费),但市场上可能还有其他图书馆。如果X509Certificate2已成功导入证书文件,那么您将从PublicKey.Key参数中获取证书的公钥。以上就是C#学习教程:Howtoconvertopenssl_pkey_get_publicandopenssl_verifytoC#.NET分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: