Java-эквивалент PHP-функции pack

У меня есть пример приложения, которое генерирует хэш SHA1 в PHP следующим образом.

base64_encode(pack('H*', sha1($pass)));

Я пытался добиться того же на Java, но пока результат другой. Я использовал следующий подход (классы Base64 и Hex взяты из библиотеки commons-codec).

    byte[] rawSHA = null;
    byte[] base64HexSHA = null;
    String hex = null;
    MessageDigest md= null;

    // Get Message Digest Instance.
    try {
        md = MessageDigest.getInstance(SHA1_ALGORITHM);
    } catch (NoSuchAlgorithmException e) {
        LOG.error("Unable to load SHA-1 Message Digest : " + e.getMessage(), e);
        throw new IllegalStateException("SHA-1 Message Digest Instance Not Found");
    }

    // Build SHA1 Hash
    rawSHA = md.digest(rawText.getBytes("UTF-8"));

    // Convert to HEX
    hex = new String(Hex.encodeHex(rawSHA));

    // Encode to Base 64
    base64HexSHA = Base64.encodeBase64(hex.getBytes("UTF-8"));

    // Return String
    return new String(base64HexSHA);

Мой вопрос в том, даст ли выбранный мной подход тот же результат, что и функция PHP pack()? Я предполагаю, что функция PHP pack() возвращает необработанные байты, тогда как Hex.encodeHex возвращает форму шестнадцатеричной строки (ссылка: http://www.w3schools.com/php/func_misc_pack.asp).

Как я могу добиться того же вывода, что и функция PHP pack() в Java (или полный вывод приведенного выше кода PHP)?


person Yohan Liyanage    schedule 23.06.2011    source источник


Ответы (1)


Преобразование в HEX не требуется, просто используйте это:

base64HexSHA = Base64.encodeBase64(rawSHA);
person Nulldevice    schedule 23.06.2011
comment
Большое спасибо. Виноват. Прочитав описание функции пакета, я решил выполнить над ним операцию HEX. Первоначально он был без шестнадцатеричной части, но не дал мне вывода. Только сейчас я обнаружил, что это было из-за другой проблемы (исходная строка, которую я передал, была не в том формате, который я ожидал. Была опечатка). Большое спасибо. - person Yohan Liyanage; 24.06.2011
comment
Это не ответ на вопрос. Хорошо, что вы заметили, что пакет не нужен, но это не отвечает на фактический вопрос, за которым другие пришли бы сюда. Ваш ответ должен был быть рекомендацией после. - person frostymarvelous; 28.09.2015