Незначительная вещь, но если вы ищете эквивалент hmac (ключ, сообщение), то по умолчанию библиотека python будет использовать алгоритм MD5, поэтому вам нужно использовать алгоритм HmacMD5 в Java.
Я упоминаю об этом, потому что у меня была именно эта проблема, и я нашел этот ответ, который был полезен, но я пропустил ту часть, где метод дайджеста был передан в hmac (), и, таким образом, прошел по кроличьей норе. Надеюсь, этот ответ не позволит другим делать то же самое в будущем.
например. в Python REPL
>>> import hmac
>>> hmac.new("keyValueGoesHere", "secretMessageToHash").hexdigest()
'1a7bb3687962c9e26b2d4c2b833b2bf2'
Это эквивалентно методу Java:
import org.apache.commons.codec.binary.Hex;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
public class HashingUtility {
public static String HMAC_MD5_encode(String key, String message) throws Exception {
SecretKeySpec keySpec = new SecretKeySpec(
key.getBytes(),
"HmacMD5");
Mac mac = Mac.getInstance("HmacMD5");
mac.init(keySpec);
byte[] rawHmac = mac.doFinal(message.getBytes());
return Hex.encodeHexString(rawHmac);
}
}
Обратите внимание, что в моем примере я делаю эквивалент .hexdigest ()