Getting False response while Verifying the data and signature SHA256 RSA with PSS padding C#

513 Views Asked by At

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;

        }
0

There are 0 best solutions below