using System.Security.Cryptography;
string requestBody = "{ \"message\": \"Hello, world!\" }";
string publicKey = "MIIBCgKCAQEA8ReOlW75tOl8khZrKBJBws4wWsU5hEr45nFd/GdW6QNPIEeHUYFBXdyrD0AywRsGLcvdvD4K7FW+Bww2WbpsJ1rPK9Wh7Ubz2V0/Vfz8HWIYEbkghC5UrmZvojNIGnNHK8/5H28kFr7DzGaUYT4AC/1LkBl9qa8T/oiJZ+p7sxzy4iVv382IMvln0LXo2Ho87pa8hBo4Z442Og5Cuqc46rYfiPutZ8s6/s65Qj6JK8Gw+V5ig8+bxKYt2jr0jkD1eUmNRk465BXmi8FIbeuzWHPrb9/8EpIvWI51q7pV6/ioaUh9DuBG4j8VyGk/gHd+ScAGQ2pmmXeHIbh4YWhgawIDAQAB";
string privateKey = "MIIEpAIBAAKCAQEA8ReOlW75tOl8khZrKBJBws4wWsU5hEr45nFd/GdW6QNPIEeHUYFBXdyrD0AywRsGLcvdvD4K7FW+Bww2WbpsJ1rPK9Wh7Ubz2V0/Vfz8HWIYEbkghC5UrmZvojNIGnNHK8/5H28kFr7DzGaUYT4AC/1LkBl9qa8T/oiJZ+p7sxzy4iVv382IMvln0LXo2Ho87pa8hBo4Z442Og5Cuqc46rYfiPutZ8s6/s65Qj6JK8Gw+V5ig8+bxKYt2jr0jkD1eUmNRk465BXmi8FIbeuzWHPrb9/8EpIvWI51q7pV6/ioaUh9DuBG4j8VyGk/gHd+ScAGQ2pmmXeHIbh4YWhgawIDAQABAoIBADm4FBC+ktW3GHW5HEpppIjI6Fay5QRBFrnE5mVpMCt0+VqXBVSEB2w7SlDKY9xLZf1M03cfu2m9VVNGnzR4JzB80yCBctTlqbeeVW12tb0rIOwNUDWVCfz+1TcV4+tBMgbRMalO6GrxnNqwrFFjkItORurmz2jyW20SryLLxnWov5OE4gm6POeELdIrKz//QRUOVe912o4SeCYr3feQRKFEpMASrB/2G2wS/RhEtBi7d40DPlvw4KQcamiBbYUy9y+eVxkFL5dJA5UHLXQTl8VXVx/CLuTVZqNGP7hf7a1AIhugXy6BxWUZiM1aJH9XC2hQM0aFZcySow8nK5CXwQECgYEA/92JuRKKsB17JjaMWwFsbLNNue7K2VlGzpoN3n7dkhp/wi4P9RA3v2hNR8Hi5d118xNMv6qSunguyZ7lwqZ393uXhjRJjKWJ+tWwRXZiDj2DxvVs8LaPo1sqLvRwmoZy5fykQYpvo+hTEMmf4s9keo/X6L/ZQmcXDt7wrkDVLkECgYEA8TgHeRWR1iFJ07lG/3JPWp6xSV2s7X8rd8zWhaiDt7EX0hGruZq6v9oD2vsfr794vK75Ak+sNjlsrf+NnZ0+wXLaWXHSasDN/KWKyYvd52YSbnANDtWgIvfcxVn/hoNZ+jq9Ltd5OHNMe2c6G+R6QDRItqUzJ8ESD3ttIB35u6sCgYEAmETlY2ivdKP22AT6fmZYelAy34ZG3haNVwLDYjgp8HsosQzsnjEqnBSceSnfuGCVgzVnJWGDtMk1PvP7VF3xYy0APfP8GWGivc5R+uS68jKVq9//FznuPY9RiWQbZzrAQjKaJg8W5XqrhIAZUMePyoi0O2WBDE2BoW332hvnQoECgYEApNwtR1U1mgqgQYL0giunDoE9G65ZPOxYUgV+bFUSyN3RMPKA0lZs4ihn0Ccnrd8H7rULXMgFI/41R+pL6HgK5v3PO6huLiXd4plldIASRk9ds3sDgasBSkTq7zqmSFHHkhzJJZWAtNMgZ4rSjTOnVfAl7iaUAsySwmAR4gx6nQcCgYBAQ2rrjN48ax3jI1c5HhesK+YpxCJ+/MkGzTJTaNKB2NrRJWmPuBl8iVIAS1q8n6BYTsd92yUNDPY+LacB8PHUVvdqIFUp9RYvtPpBAqsFaIEBNWcIKWVxIFo8pZdDz5ksCwXtvnZvsuqPyW6SKgkNmy6+mbzMg6WzvdvHtcB7Eg==";
string signature = SignData(requestBody, privateKey);
Console.WriteLine($"Signature: {signature}");
bool isValid = VerifySignature(requestBody, signature, publicKey);
Console.WriteLine($"Signature Valid: {isValid}");
static string SignData(string data, string privateKeyBase64)
byte[] dataBytes = Encoding.UTF8.GetBytes(data);
byte[] privateKeyBytes = Convert.FromBase64String(privateKeyBase64);
using RSA rsa = RSA.Create();
rsa.ImportRSAPrivateKey(privateKeyBytes, out _);
byte[] signatureBytes = rsa.SignData(dataBytes, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
return Convert.ToBase64String(signatureBytes);
static bool VerifySignature(string data, string signatureBase64, string publicKeyBase64)
byte[] dataBytes = Encoding.UTF8.GetBytes(data);
byte[] signatureBytes = Convert.FromBase64String(signatureBase64);
byte[] publicKeyBytes = Convert.FromBase64String(publicKeyBase64);
using RSA rsa = RSA.Create();
rsa.ImportRSAPublicKey(publicKeyBytes, out _);
return rsa.VerifyData(dataBytes, signatureBytes, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);