Esempio n. 1
0
        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)));
        }