using System.Security.Cryptography;
public static void Main()
var jsonOriginal = "{\"Id\": 1}";
var data = Encoding.UTF8.GetBytes(jsonOriginal);
using var hashAlgorithm = SHA256.Create();
var hash = hashAlgorithm.ComputeHash(data);
var sb = new StringBuilder();
sb.Append(b.ToString("X2"));
var hashString = sb.ToString();
Console.WriteLine($"hashString: {hashString}");
RSAParameters rsaParameters = new RSAParameters
Exponent = Convert.FromBase64String("AQAB"),
Modulus = Convert.FromBase64String("vyVECIHMudAKH0ycZ9aHBOLEOK/NgidV5Sr0RkMWmogYmpmpIlsuMf+/tuNY8H+Kj522zfIIvgHEb+Jf64UyQbYgKMlSLMtruPFUMChqV1MiY2Q+E8c5/Q6kJdj82RM9ZbLnzBfg4gcpQ8qLJgoLKHGPXE/Rox1KdmEGOY3aRGPK62veLBQ+aFa95hVkmKvscq8+XsgAynIcHpMSwaU358l+rI7dR7/jiSXV6MzbXEgA4dL2JzIf/ZPW4oLh/r75auUWJSWI/6T7IGved1A1tD7WftytNEl8bjAlxVUKvSFNGu3rWmNOrhRfxC+fPe/3R8zdWDzIIUEX78qsRrA/VQ=="),
D = Convert.FromBase64String("PhpwgUcS6igysbqlcoNb+PVohXZxEeGP4dZT6WQwuuKPA+P69OOlHa+XbWduZS07KrA2TbFer8VJOoTVX2M2Ue1Hg5jtbwpkpIEcNk1bR6YGHT7bgHeRWqvgHz/h3vGGWD2JXGFBuo5TFOiAz0oiF/DVgEuatCF3KQEbEaYKDX/DCuml1ESiI17jOJRa+d+hCtkbhIOG4rTCm9bNjbvFVj67QO2r4SfpmBp6bhex13TNxT84ggL+gV9N11Tb8WST0ZwjuNWmQdEy1DoXJUZMYos0Y+s9sOCckhP6zYRmXGeuychg+mnfrufGBEbbhN0fa0ARo6RsN6bFpYamW+g2PQ=="),
DP = Convert.FromBase64String("evi+l/Qa+CQ48sSFFaWBXKdAhVUmiGoLvBVeThTb/b9KNKIAJXmch6Pg9BOT3mqB/dQEJW9qx1hMzOR4WtoEkK0WZUMjhZk0IhoZ2Upqc6mYByHPmMhKnq588ihWtA/x0BsTWlcZHaxPEr8ZMAh9ZaMwBNd5zBueOGgMsA968Ac="),
DQ = Convert.FromBase64String("LQzfNIVyKXYBVIRCQOZ9VYcXQTUsBDALioLzJOjA+jh8loGUvVOnw8eaUp65+z37ZyZRB8QFfEw/iFB7RaOxCLWJ2lKkwL7ckK9ctIGVlHj4I1bQB8pFgfQ3r6mVX5uuRd7zJDIUu5Tanfa/6yrjjpoEPqwRxr/OUYR63mf9wy8="),
InverseQ = Convert.FromBase64String("lWysu/TFru4gsB76ZFXXAyr4rtXYuuQEq4dCPTAsmkjya+iyYM0DCIh98gLGHzgtCG54kTCZ3fvYgRhN0lDoMdhJd1dPF8NGHhMR+OlBhVkHwzHjqajFLdeCJIctRELNyt58KaZH4zEszdU/XwyUf/Ko4RRUBq33X+aQ0m3istY="),
P = Convert.FromBase64String("4ukvIw6AZt03Oek1M7wYYMMcEHIkWmPjEZort/k19HKpXmNJPB5fr4GM5A8i0idfPUJgaGUVffMvgDqfeanVZHPsf4ggENBY4bxu/vif4mP/vumJ2o/SCRqwF3L2spXkkUIguCJViJOmeNylKwVosccdCl5PyZsJCBT33PiiM38="),
Q = Convert.FromBase64String("16ZTwe71ttFJloiDSNge493ooe+uM38gHZcO3NONP1JOjUnTcKDAgiEPiuSLFAZ7UYnd5UfrNpzzieass2kdy0f7D59ZbFANwOkCHEcEqC8Ofz3mDtCWHXasD4GLFRfDcjbOJxpAUPTXO+qk6yEEKQQvgcERzCkBw4HBag4G5ys=")
using (RSA rsa = RSA.Create(rsaParameters))
RSAPKCS1SignatureFormatter rsaFormatter = new(rsa);
rsaFormatter.SetHashAlgorithm(nameof(SHA256));
signedHash = rsaFormatter.CreateSignature(hash);
foreach (byte b in signedHash)
sb.Append(b.ToString("X2"));
var signedHashString = sb.ToString();
Console.WriteLine($"signedHashString: {signedHashString}");
using (RSA rsa = RSA.Create())
rsa.ImportParameters(rsaParameters);
RSAPKCS1SignatureDeformatter rsaDeformatter = new(rsa);
rsaDeformatter.SetHashAlgorithm(nameof(SHA256));
signedHash = StringToByteArray("4F3DBA8DD71EC270AEFFD1A89D9997649AA4AED6EC898523183BBF0866D8D1C916219D842B8D8D398CFD7562FC8BF29F43E428F79EA7BAB6441A9BB9477A3256D5098F0AF0B69F3038CCD29844FE59ECEC96510F645E0A347D19055E4481945FB96779D688E947C983F65DEDE9123C6B49004121EA75E99EA08E718CE4C3FDDEC8D216D6503555BB26F771E26F26C2CB9B4BC070FFBB782F1A321DFBE27578CC66D7C11EF17D3762C67D73FEF0F590CC8C06201AD80970A01302987C5605B290867DE0D9C394F7517BA4EDBE5FA224DB8A74E510434C8369442911F1835375792D7E194FE727B4DC1BF1FB3B9EF45B6ACE8AD8C1FF77F3313CC27FC0AD38AE44");
if (rsaDeformatter.VerifySignature(hash, signedHash))
Console.WriteLine("The signature is valid.");
Console.WriteLine("The signature is not valid.");
byte[] StringToByteArray(String hex)
int NumberChars = hex.Length;
byte[] bytes = new byte[NumberChars / 2];
for (int i = 0; i < NumberChars; i += 2)
bytes[i / 2] = Convert.ToByte(hex.Substring(i, 2), 16);