Проверка сигнатуры на golang сервере

Рейтинг: 0Ответов: 1Опубликовано: 18.01.2023

Со стороннего апи приходит пост запрос, в котором есть body. Среди прочих параметров есть поле checksum, которое содержит хэш сумму. Задача проверить хэш сумму, для того чтобы удостовериться в подлинности сообщения. Для этого нужно: -Взять все поля тела запроса и сгенерировать вот такую строку(параметр checksum откидывается): "param1;value1;param2;value2;paramN;valueN;" (ключи/значения разделены ";", при этом все параметры предварительно должны быть отсортированные в алфавитном порядке). -Все действия которые выполняются дальше не вызывают затруднений, трудность в составлении этой строки, причем используя эффективный алгоритм

Ответы

▲ 0

Решил свою задачу, вот таким образом:

func CreateSignatureString(request Request) string {
    jsonData, _ := json.Marshal(request)

    stringData := string(jsonData[1 : len(jsonData)-1])
    stringData = strings.ReplaceAll(stringData, "\"", "")
    stringData = strings.ReplaceAll(stringData, ":", ";")

    sliceString := strings.Split(stringData, ",")

    sort.Strings(sliceString)

    newSlice := make([]string, 0, len(sliceString)-2)

    for _, val := range sliceString {
        if strings.HasPrefix(val, "checksum") || strings.HasPrefix(val, "sign_alias") {
            continue
        }
        newSlice = append(newSlice, val)
    }

    resultString := strings.Join(newSlice, ";") + ";"

    return resultString
}

Request в данном примере, это стуктурный тип, в который парсился body запроса.