public bool CheckSign(string sign, string data) { var provider = new RSACryptoServiceProvider(); provider.FromXmlString(XmlPublicKey); var keyPair = DotNetUtilities.GetRsaPublicKey(provider); var c = CipherUtilities.GetCipher("RSA/ECB/PKCS1Padding"); c.Init(false, keyPair); //第一个参数为true表示加密,为false表示解密;第二个参数表示密钥 var byteData = Convert.FromBase64String(sign); var source = Regex.Replace($"<?xml version=\"1.0\" encoding=\"UTF-8\" ?>{data}", "[\r\n\t]", ""); source = Regex.Replace(source, @">\s+<", "><"); source = Regex.Replace(source, @"\s+/>", "/>"); var hash = GetHash(source); return(hash == SecretUtil.BytesToString(c.DoFinal(byteData))); }