Getting False Response while verifying the data and signature. I have used the below link but not luck [Text] Verify RSA SHA256 signature in C#
Public Key : -----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAj1UpJQHGsdlkvlJ6IBWD KwwczIM3e+NkoBcyUhxSGxB2C7W8x2hbU66uSqLDOaKeXXf/owvRJMLawHCBZgMv 5pTKwFQllD63sZQEAl5dl+VpWf9jmy1BAE3/HBQYM6tEUykx7a9h+4f167v3JxPt PWpFcBEL3OdnGlYkV/4nhLFop0MSN2szDTfu4IYToy36QlzEhvS9xmNZbVhKkgJN fxAVgJDMmttJFQdF5ax4jENF04YHO+OPuTPW2HIDkImKXyme9rEqeg0WWslyKoO3 3X0TFa5KTr9sGl5jcgqhJklzvVUUEfzaEK3w1+B1zfmgv7ZfgMq8mCBSm6+DkhVG nQIDAQAB -----END PUBLIC KEY----- RequestBody :{ "amount": "100.00", "customResponse": "{}", "gatewayReferenceId": "806115044725", "gatewayResponseCode": "00", "gatewayResponseMessage": "Your transaction is successfule", "gatewayResponseStatus": "SUCCESS", "gatewayTransactionId": "YJPd0c077f39c45497912it3i0192", "merchantChannelId": "UAT", "merchantId": "UAT", "merchantRequestId": "TXN1234567", "payeeMcc": "1520", "payeeVpa": "test@transact", "payerMerchantCustomerId": "DEMO-CUST-5678", "payerName": "Customer Name", "payerVpa": "customer@xyz", "refUrl": "https://www.abcxyz.com/", "transactionTimestamp": "2021-07-23T13:45:00+05:30", "type": "MERCHANT_CREDITED_VIA_PAY", "udfParameters": "{}" }, Signature :26b339a48db62a5b3e779a8e95e6c39d81942fe4549a1ce2b31cb8cd6e6b7781e9b1ac6c5e5b7e31ec722227ab2d7277964dd0ec7f2868f0ac5d76cb7ce3f723b5f708397d5889612a86548fa9963e4b4f1a3dab3cf51c8600ed8da3f4afae23034f2fb3f2c141325091e248c8912ef124121df7988fd52522843f7c0448727d5a6e8dd945a1bb31d7b120940ee6e96814075e46a380fd7da54066aee27fd1d1d8b495bd7a606e4e43aa65dfc4d54de9120bd3026acc19a3d51bb61ef98662bc5cc2bb3838707b779d8db4c049c4421a10d8f897c3f7d5190f668ed5f8b4567cfbb445d2ed288b1add3ea5eaecc3862c252a732aa97832c27461c299e3016f6c
//String input = RequestBody in String UTF-8 encoding
// Getting RequestBody through post . Please refer the RequestBody mentioned above
string input = await Request.Content.ReadAsStringAsync();
//String signature = headers["x-merchant-signature"]
string signature = Request.Headers.GetValues("X-Merchant-Payload-Signature").First(); // Signature Above
//Convert Public Key through Onine Tool
[Text] https://superdry.apphb.com/tools/online-rsa-key-converter]
string publicKey = "<RSAKeyValue><Modulus>j1UpJQHGsdlkvlJ6IBWDKwwczIM3e+NkoBcyUhxSGxB2C7W8x2hbU66uSqLDOaKeXXf/owvRJMLawHCBZgMv5pTKwFQllD63sZQEAl5dl+VpWf9jmy1BAE3/HBQYM6tEUykx7a9h+4f167v3JxPtPWpFcBEL3OdnGlYkV/4nhLFop0MSN2szDTfu4IYToy36QlzEhvS9xmNZbVhKkgJNfxAVgJDMmttJFQdF5ax4jENF04YHO+OPuTPW2HIDkImKXyme9rEqeg0WWslyKoO33X0TFa5KTr9sGl5jcgqhJklzvVUUEfzaEK3w1+B1zfmgv7ZfgMq8mCBSm6+DkhVGnQ==</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>"
//Convert Request Body in UTF Bytes
byte[] InputdataForSignAsBytes = Encoding.UTF8.GetBytes(input);
byte[] signatureAsBytes = StringToByteArray(signature);
//Create Instance of Crypto
//Signature rsa = Signature.getInstance("SHA256withRSA");
RSACryptoServiceProvider rsaCryptoServiceProvider = new RSACryptoServiceProvider();
rsaCryptoServiceProvider.FromXmlString(publicKey);
//Get HasData of InputBody
var hashData = SHA256.Create().ComputeHash(InputdataForSignAsBytes);
var result1 = rsaCryptoServiceProvider.VerifyData(InputdataForSignAsBytes, CryptoConfig.MapNameToOID("SHA256"), signatureAsBytes);
var result2 = rsaCryptoServiceProvider.VerifyHash(hashData, CryptoConfig.MapNameToOID("SHA256"), signatureAsBytes);
var result3 = rsaCryptoServiceProvider.VerifyHash(hashData, signatureAsBytes, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
var result4 = rsaCryptoServiceProvider.VerifyData(InputdataForSignAsBytes, signatureAsBytes, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
Console.WriteLine(result1);
Console.WriteLine(result2);
Console.WriteLine(result3);
Console.WriteLine(result4);
//Supporting methods
private string ReadpublickeyEncodeTo64 (string publicKeyPath)
{
string encodedPublicKey = File
.ReadAllText(publicKeyPath)
.Replace("-----BEGIN PUBLIC KEY-----", string.Empty)
.Replace("-----END PUBLIC KEY-----", string.Empty)
.Trim();
return EncodeTo64(encodedPublicKey);
}
public string EncodeTo64(string toEncode)
{
byte[] toEncodeAsBytes = System.Text.ASCIIEncoding.ASCII.GetBytes(toEncode);
string returnValue = System.Convert.ToBase64String(toEncodeAsBytes);
return returnValue;
}