无法使用C#

时间:2019-11-25 03:49:21

标签: c# json rsa

需要使用C#中的RSA256验证以下JSON有效负载的签名

具有签名的用户有效载荷

{
    "name": {
        "value": "Test",
        "signature": "0b33ce0b9c09f286ddef4016bcfa046191d268247d5df85aa4ebc3e25c42db592a2bcb2b15e83005e33c81a6645d296a8e76cc21874fd7134f307593a117569d51f6d1794c2e351ec8341134532be47d1c3303a2a47bd5aa5015380585420b44ed726050a5db3f14191beb09074fd69fa1f3c48520e7368d4b6f65acd9ea95029260570d4d7d6166310c8cdb82cf4e55f9a658c76916290bfb9e68f867185dc8ee22e3f56c2d6730d9570a4806dc1bc9a2d987250a0ed13196d944912fd3bf6c7038756996863690adbd829374ff7588a56d3cfd795e9c6e188c65594a633b7201dd3eb2d1b089f28cd5143a5dcfbd211c4ff428fb8050415f022f4910bf48c0"
    }   
}

验证数据代码块

        {
            bool success = false;

            string nameValue = userInformation.name.value.ToString();
            string nametobeverify =  JsonConvert.SerializeObject(new { name = nameValue });
            string key = RemoveHeaderFooterFromKey(publicKey);
            var keyBytes = Convert.FromBase64String(key); // your key here
            AsymmetricKeyParameter asymmetricKeyParameter = PublicKeyFactory.CreateKey(keyBytes);
            RsaKeyParameters rsaKeyParameters = (RsaKeyParameters)asymmetricKeyParameter;
            RSAParameters rsaParameters = new RSAParameters();
            rsaParameters.Modulus = rsaKeyParameters.Modulus.ToByteArrayUnsigned();
            rsaParameters.Exponent = rsaKeyParameters.Exponent.ToByteArrayUnsigned();
            using (var rsa = new RSACryptoServiceProvider())
            {

                var encoder = new UTF8Encoding();
                byte[] bytesToVerify = encoder.GetBytes(nametobeverify);

                byte[] signedBytes = Convert.FromBase64String(userInformation.name.signature);
                try
                {
                    rsa.ImportParameters(rsaParameters);
                    SHA256Managed Hash = new SHA256Managed();
                    byte[] hashedData = Hash.ComputeHash(signedBytes);
                    success = rsa.VerifyData(bytesToVerify, CryptoConfig.MapNameToOID("SHA256"), signedBytes);
                }
                catch (CryptographicException e)
                {
                    Console.WriteLine(e.Message);
                }
                finally
                {
                    rsa.PersistKeyInCsp = false;
                }
            }
            return success;
        }







在这里,我尝试验证“用户有效负载”中“名称”数据字段的签名,但我总是报错。我做错了吗?

每个数据字段都有一个字段名称,值和签名。

要验证数据字段,需要创建一个字段名称为json值的对象,对对象进行字符串化,然后使用RS256使用verify_key(公钥)对签名进行验证。

  

用户有效载荷格式{名称:{值:“ John”,签名:“ xyz”}

dataToVerify = stringify({name:“ John”})

isValid = RS256(dataToVerify,Verification_key,“ xyz”)


0 个答案:

没有答案