c# SHA256 ToBase64String of string not the same as test case

630 views Asked by At

I'm working on a body payload digest for a post request.

I'm using the test case provided to try and get the same output base64 as CyberSource does using their test values and test method.

public static string GenerateDigest() {
     var digest = "";
     var bodyText = "{ your JSON payload }";
     using (var sha256hash = SHA256.Create()) {
         byte[] payloadBytes = sha256hash
             .ComputeHash(Encoding.UTF8.GetBytes(bodyText));
         digest = Convert.ToBase64String(payloadBytes);
         digest = "SHA-256=" + digest;
     }
     return digest;
}

Digest The test case has the following JSON payload:

{
  "clientReferenceInformation": {
    "code": "TC50171_3"
  },
  "processingInformation": {
    "commerceIndicator": "internet"
  },
  "paymentInformation": {
    "card": {
      "number": "4111111111111111",
      "expirationMonth": "12",
      "expirationYear": "2031",
      "securityCode": "123"
    }
  },
  "orderInformation": {
    "amountDetails": {
      "totalAmount": "102.21",
      "currency": "USD"
    },
    "billTo": {
      "firstName": "John",
      "lastName": "Doe",
      "company": "Visa",
      "address1": "1 Market St",
      "address2": "Address 2",
      "locality": "san francisco",
      "administrativeArea": "CA",
      "postalCode": "94105",
      "country": "US",
      "email": "[email protected]",
      "phoneNumber": "4158880000"
    }
  }
}

CyberSource image

The test payload I've attempted to generate the base64 string with are the following:

var bodyText = @"
{
  ""clientReferenceInformation"": {
    ""code"": ""TC50171_3""
  },
  ""processingInformation"": {
    ""commerceIndicator"": ""internet""
  },
  ""paymentInformation"": {
    ""card"": {
      ""number"": ""4111111111111111"",
      ""expirationMonth"": ""12"",
      ""expirationYear"": ""2031"",
      ""securityCode"": ""123""
    }
  },
  ""orderInformation"": {
    ""amountDetails"": {
      ""totalAmount"": ""102.21"",
      ""currency"": ""USD""
    },
    ""billTo"": {
      ""firstName"": ""John"",
      ""lastName"": ""Doe"",
      ""company"": ""Visa"",
      ""address1"": ""1 Market St"",
      ""address2"": ""Address 2"",
      ""locality"": ""san francisco"",
      ""administrativeArea"": ""CA"",
      ""postalCode"": ""94105"",
      ""country"": ""US"",
      ""email"": ""[email protected]"",
      ""phoneNumber"": ""4158880000""
    }
  }
}
";

and..

var bodyjson = new
            {
                clientReferenceInformation = 
                new { code = "TC50171_3" },
                processingInformation =
                new {
                commerceIndicator = "internet"},
                paymentInformation =
                new { card =
                    new {
                        number = "4111111111111111",
                        expirationMonth = "12",
                        expirationYear = "2031",
                        securityCode = "123"
                    }
                },
                orderInformation = new
                {
                    amountDetails = new
                    {
                        totalAmount = "102.21",
                        currency = "USD"
                    },
                    billTo = new
                    {
                        firstName = "John",
                        lastName = "Doe",
                        company = "Visa",
                        address1 = "1 Market St",
                        address2 = "Address 2",
                        locality = "san francisco",
                        administrativeArea = "CA",
                        postalCode = "94105",
                        country = "US",
                        email = "[email protected]",
                        phoneNumber = "4158880000"
                    }
                }
            };
            var bodystring = JsonConvert.SerializeObject(bodyjson, Formatting.Indented);

The Sha256 byte64 returned should be:

SHA-256=a/goIo1XUCr80rnKFCWp7yRpwVL50E9RaunuEHh11XM=

enter image description here

The the test case code above is all from the Cybersource getting started guide. But my body string just does not produce the same result.

Any assistance would be appreciated.

1

There are 1 answers

0
Jimmypoo On
string body = "{\n" +
                "  \"clientReferenceInformation\": {\n" +
                "    \"code\": \"TC50171_3\"\n" +
                "  },\n" +
                "  \"processingInformation\": {\n" +
                "    \"commerceIndicator\": \"internet\"\n" +
                "  },\n" +
                "  \"orderInformation\": {\n" +
                "    \"billTo\": {\n" +
                "      \"firstName\": \"john\",\n" +
                "      \"lastName\": \"doe\",\n" +
                "      \"address1\": \"201 S. Division St.\",\n" +
                "      \"postalCode\": \"48104-2201\",\n" +
                "      \"locality\": \"Ann Arbor\",\n" +
                "      \"administrativeArea\": \"MI\",\n" +
                "      \"country\": \"US\",\n" +
                "      \"phoneNumber\": \"999999999\",\n" +
                "      \"email\": \"[email protected]\"\n" +
                "    },\n" +
                "    \"amountDetails\": {\n" +
                "      \"totalAmount\": \"10\",\n" +
                "      \"currency\": \"USD\"\n" +
                "    }\n" +
                "  },\n" +
                "  \"paymentInformation\": {\n" +
                "    \"card\": {\n" +
                "      \"expirationYear\": \"2031\",\n" +
                "      \"number\": \"5555555555554444\",\n" +
                "      \"securityCode\": \"123\",\n" +
                "      \"expirationMonth\": \"12\",\n" +
                "      \"type\": \"002\"\n" +
                "    }\n" +
                "  }\n" +
                "}";