Как получить одинаковый результат HMAC MD5 в Python и JavaScript

У меня есть JavaScript функция для хеширования паролей:

result = hex_hmac_md5(api_key, user_password)

Пытаюсь воспроизвести такой же результат в Python, но значения не совпадают. В JavaScript использую HMAC-MD5 алгоритм для комбинирования ключа с данными.

В Python пробовал такой код:

def hash_password(api_key, user_password):
    return md5(api_key + user_password).hexdigest()

Но результат получается другой. Видимо проблема в том, что просто склеивание строк работает не так же как HMAC. Как правильно реализовать HMAC MD5 в Python чтобы получить точно такой же хеш как в JavaScript? Нужна именно hex версия результата.

Проверь порядок параметров в js коде. В разных библиотеках по-разному - где-то сначала message, потом key, где-то наоборот. Если hmac.new(api_key.encode(), user_password.encode(), hashlib.md5).hexdigest() не работает, попробуй поменять api_key и user_password местами. Какую js библиотеку используешь?

Ты просто склеиваешь строки, а hmac — это другой алгоритм. В питоне используй модуль hmac:

import hmac
import hashlib

result = hmac.new(api_key.encode('utf-8'), user_password.encode('utf-8'), hashlib.md5).hexdigest()

Всегда указывай utf-8, чтобы не было проблем между платформами. Я так делаю для совместимости с js.

да, обычное склеивание строк это не hmac. в питоне есть встроенная библиотека hmac, которая делает то что нужно. попробуй так:

import hmac
import hashlib

def hash_password(api_key, user_password):
    return hmac.new(api_key.encode(), user_password.encode(), hashlib.md5).hexdigest()

не забудь encode() для строк, иначе будет ошибка. у меня получились такие же хеши как в js когда делал похожую задачку