/// <summary> /// 公钥验签 /// </summary> /// <param name="pubCertFilePath"></param> /// <param name="encoding"></param> /// <param name="RspSign"></param> /// <param name="RspText"></param> /// <returns></returns> public static bool CAVerifySign(string pubCertFilePath, byte[] sign , byte[] rspbyte,HalgType halg) { //调用证书(公钥) X509Certificate2 Cert = new X509Certificate2(pubCertFilePath); RSACryptoServiceProvider PublicKey = (RSACryptoServiceProvider)Cert.PublicKey.Key; RSACryptoServiceProvider publickey1 = new RSACryptoServiceProvider(); publickey1.ImportParameters(PublicKey.ExportParameters(false)); switch (halg) { case HalgType.MD5: return publickey1.VerifyData(rspbyte, new MD5CryptoServiceProvider(), sign); case HalgType.SHA1: return publickey1.VerifyData(rspbyte, new SHA1CryptoServiceProvider(), sign); case HalgType.SHA256: return publickey1.VerifyData(rspbyte, new SHA256CryptoServiceProvider(), sign); case HalgType.HmacSHA1: return publickey1.VerifyData(rspbyte, new HMACSHA1(), sign); case HalgType.HmacMD5: return publickey1.VerifyData(rspbyte, new HMACMD5(), sign); case HalgType.HamcSHA256: return publickey1.VerifyData(rspbyte, new HMACSHA256(), sign); default: return publickey1.VerifyData(rspbyte, new MD5CryptoServiceProvider(), sign); } }
/// <summary> /// 私钥加签 /// </summary> /// <param name="CertFilePath">证书完整路径</param> /// <param name="CertPass">证书密码</param> /// <param name="Text">待签名文本</param> /// <param name="encoding">编码规范</param> /// <returns></returns> public static string CACertSign(string priCertFilePath, string CertPass, string Text, Encoding encoding, HalgType halg) { //调用证书(私钥,需要密码) X509Certificate2 privateCert = new X509Certificate2(priCertFilePath, CertPass, X509KeyStorageFlags.Exportable); RSACryptoServiceProvider privateKey = (RSACryptoServiceProvider)privateCert.PrivateKey; // 获取私钥 RSACryptoServiceProvider privateKey1 = new RSACryptoServiceProvider(); privateKey1.ImportParameters(privateKey.ExportParameters(true)); byte[] data = encoding.GetBytes(Text); byte[] signature = new byte[1024]; switch (halg) { case HalgType.MD5: signature = privateKey1.SignData(data, new MD5CryptoServiceProvider()); break; case HalgType.SHA1: signature = privateKey1.SignData(data, new SHA1CryptoServiceProvider()); break; case HalgType.SHA256: signature = privateKey1.SignData(data, new SHA256CryptoServiceProvider()); break; case HalgType.HmacSHA1: signature = privateKey1.SignData(data, new HMACSHA1()); break; case HalgType.HmacMD5: signature = privateKey1.SignData(data, new HMACMD5()); break; case HalgType.HamcSHA256: signature = privateKey1.SignData(data, new HMACSHA256()); break; default: signature = privateKey1.SignData(data, new MD5CryptoServiceProvider()); break; } //对签名密文进行Base64编码 return Convert.ToBase64String(signature); }