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