получить отрицательное значение на md5 - PullRequest
0 голосов
/ 28 февраля 2012

Я пытаюсь получить MD5 с Java, и я получаю отрицательное значение. Может ли MD5 привести к отрицательному значению?

Это мой код:

        MessageDigest md5 = MessageDigest.getInstance("MD5");
        byte[] sigBytes = md5.digest((sharedSecret+"api_key"+API_KEY).getBytes());
        api_sig = new BigInteger(sigBytes).toString(16);

Спасибо.

Ответы [ 3 ]

2 голосов
/ 28 февраля 2012

new BigInteger(sigBytes) интерпретирует вашу подпись как целое число со знаком, так что да, было бы возможно получить отрицательное число. Если вы хотите, чтобы ваша строка содержала шестнадцатеричное представление вашего значения md5, взгляните на некоторые ответы здесь: Как я могу сгенерировать хеш MD5?

0 голосов
/ 24 мая 2013

Как указано jbowes , new BigInteger(sigBytes) интерпретирует подпись как целое число со знаком (то есть первый бит обозначает, является ли число положительным или отрицательным). Если вы хотите, чтобы байты интерпретировались как число без знака, вместо этого следует использовать new BigInteger(1, sigBytes).

0 голосов
/ 28 февраля 2012

Я использую следующий метод, чтобы получить правильную строку хеша MD5 (и она никогда не давала мне «отрицательное» значение):

public static String createMD5Hash(String input) {
    try {
        MessageDigest m = MessageDigest.getInstance("MD5");
        byte[] out = m.digest(input.getBytes());
        return new String(Base64.encodeBase64(out));
    } catch (NoSuchAlgorithmException e) {
        return null;
    }
}

Обратите внимание, что Base64 - это класс из Apache Commons:

import org.apache.commons.codec.binary.Base64;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...