需要使用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”)