Код Middle Криптография на практике и JWT обновлено
Проверка HMAC-подписи вебхука
Условие
Напишите verify_webhook(body, signature, secret). Партнёр подписывает тело запроса HMAC-SHA256 с общим секретом и передаёт подпись hex-строкой.
Верните True, если signature (без учёта регистра букв) совпадает с HMAC-SHA256 от body (строка в UTF-8) с ключом secret (строка в UTF-8). Некорректный hex и подпись не той длины дают False. Сравнение должно быть за постоянное время.
Примеры
verify_webhook("{\"event\":\"paid\",\"amount\":100}", "9c8ce9ee855e5f196c922e4c316754536ffd235415d1017b135431783c3ff108", "whsec_test") // true
verify_webhook("{\"event\":\"paid\",\"amount\":100}", "9C8CE9EE855E5F196C922E4C316754536FFD235415D1017B135431783C3FF108", "whsec_test") // true
verify_webhook("{\"event\":\"paid\",\"amount\":999}", "9c8ce9ee855e5f196c922e4c316754536ffd235415d1017b135431783c3ff108", "whsec_test") // false
Как подойти
Подсказки: 2
- Переведите hex в байты через
bytes.fromhexвнутри try. hmac.compare_digest(a, b)для сравнения.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.