【问题标题】:Generating HMAC signature生成 HMAC 签名
【发布时间】:2020-06-04 04:13:39
【问题描述】:

我正在尝试生成 HMAC 签名。这是为了与信用卡公司进行验证。下面是我生成 HMAC 签名的代码:

public  string APISecurityKey(Identity postParameters)
        {
            String secretAccessKey = "secretkey";
            string  data = "message";
            byte[] secretKey = Encoding.UTF8.GetBytes(secretAccessKey);
            HMACSHA256 hmac = new HMACSHA256(secretKey);
            hmac.Initialize();
            byte[] bytes = Encoding.UTF8.GetBytes(data);
            byte[] rawHmac = hmac.ComputeHash(bytes);
            return Convert.ToBase64String(rawHmac);

        }

他们要求我用 JSON 请求替换消息字段(提供的 JSON 应将所有回车换行符序列替换为空格字符)。我的对象看起来像这样:

 public class Identity
    {
        public List<Header> header { get; set; }
        public string firstName { get; set; }
        public string LastName { get; set; }
        public string middleName { get; set; }
        public string address { get; set; }
        public string mothersName { get; set; }
        public string DriversLic { get; set; }
        public DateTime insertTime { get; set; }
        public string Status { get; set; }
        public string city { get; set; }
        public string state { get; set; }
        public string zip { get; set; }
        public DateTime UpdatedOn { get; set; }
    }
}


 public class Header
    {
        public string tenantId { get; set; }
        public string requestType { get; set; }
        public string clientReferenceId { get; set; }
        public string expRequestId { get; set; }
        public string txnId { get; set; }
        public string messageTime { get; set; }
        public string options { get; set; }


    } 

给我的消息示例是这样的:

{"tenantId": "TENANT1","request Type": "Simulator","clientRefere
nceId": "Hunter + ProveID","expRequestId": "333","messageTim
e": "2016-08-04T22:13:07Z","options": {"workflow": "wf1","model
Type":"mt1","responseType":1,"Responses": {…}}}

我不确定如何在我的 JSON 消息中包含tenantId、tenantId、expRequestId、选项。我对 JSON 很陌生。我有这个部分代码:

public static async Task createJSON( Identity postParameters)
        {
            var tmpRequest = new HttpRequestMessage();
            tmpRequest.Content = new StringContent(JsonConvert.SerializeObject(postParameters));

            tmpRequest.Content.Headers.Add("tenantId", "V123456");
            tmpRequest.Content.Headers.Add("requestType", "PreciseIdOnly");
        }

postParameters 是我的带有值的 Identity 对象。如何创建包含 tenantId、tenantId、expRequestId 和对象的 JSON,以便我可以将该 JSON 值放入 APISecurityKey 方法的消息中。下面是我需要创建的测试 JSON 文件:

{
    "header": {
        "tenantId": "V123456",
        "requestType": "Precise",
        "clientReferenceId": "11111111",
        "RequestId": "",
        "txnId": "",
        "messageTime": "2020-05-28T00:00:02Z",
        "options": {}
    },
    "payload": {
        "control": [
            {
                "option": "SUBSCRIBER_PREAMBLE",
                "value": "wer"
            },
            {
                "option": "SUBSCRIBER_OPERATOR_INITIAL",
                "value": "WS"
            },
            {
                "option": "SUBSCRIBER_SUB_CODE",
                "value": "1111111"
            },
            {
                "option": "PID_USERNAME",
                "value": "demo"
            },
            {
                "option": "PID_PASSWORD",
                "value": "password"
            },
            {
                "option": "PRODUCT_OPTION",
                "value": "11"
            }
        ],
        "contacts": [{
            "id": "APPLICANT_CONTACT_ID_1",
            "person": {
                "typeOfPerson": "",
                "personIdentifier": "",
                "personDetails": {
                    "dateOfBirth": "1990-12-11",
                    "yearOfBirth": "",
                    "age": "",
                    "gender": "",
                    "noOfDependents": "",
                    "occupancyStatus": "",
                    "mothersMaidenName": "",
                    "spouseName": ""
                },
                "names": [{
                    "id": "",
                    "firstName": "Test1",
                    "middleNames": "D",
                    "surName": "Test2",
                    "nameSuffix": ""
                }]
            },
            "addresses": [{
                "id": "Main_Contact_Address_0",
                "addressType": "CURRENT",
                "poBoxNumber": "",
                "street": "2312 Test Drve",
                "street2": "",
                "postTown": "test",
                "postal": "49548",
                "stateProvinceCode": "CA"
            }],
            "identityDocuments": [{
                "documentNumber": "123456789",
                "hashedDocumentNumber": "",
                "documentType": "SSN"
            }]

        }]
    }
}

我想使用对象在 C# 中生成与上面示例相同的 JSOn。

任何帮助将不胜感激。

【问题讨论】:

  • 信用卡公司是否提供了您需要遵守的某种规范或文档?如果有,可以分享一下吗?很难从您的问题中看出预期的输出应该是什么。
  • 我添加了信用卡公司发给我的示例 JSON

标签: c# json hmac hmacsha1


【解决方案1】:

如果您使用 Visual Studio,您可以通过转到编辑菜单并将 JSON 粘贴为类来创建 JSON。这将为您创建所有类,然后您可以通过实例化它们为类分配值

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-04
    相关资源
    最近更新 更多