@ChernovGV

Как сформировать hash по ГОСТ (есть код на JAVA, нужно на php)?

Добрый день.
Задача - отправить файлы методом PUT на определенный сервер, и потом через SOAP передать hash этого файла.
В документации написано, что требуется хешировать по алгоритму ГОСТ 34.11-94.
Пробовал так:
$string = file_get_contents($path);
$hash = bin2hex(mhash(MHASH_GOST,$string));

Но при отправке SOAP конверта, возникает ошибка говорящая, что хеш не верный.
Обратился в тех поддержку, мне привели пример хеширования на java:
byte[] bytes = IOUtils.toByteArray(new FileInputStream("/home/zinin/tmp/xxx.pdf"));
        MessageDigest digest = MessageDigest.getInstance(GostConsts.GOST_DIGEST_ALGORITHM_NAME, CommonConstants.TRUSTED_JAVA_PROVIDER);
        byte[] result = digest.digest(bytes);
        LOGGER.info("hash: " + new String(Hex.encodeHex(result, true)));


Также мне посчитали хеш для строки "somestring" = "5ed5fe405f6872d23fb71ce21321bcb514e1fe59bdd9f21e3bc1d3fe3c48d758";

Посчитал хэш на php:
$string = "somestring";
echo bin2hex(mhash(MHASH_GOST,$string));
//Результат:66231654633f311301af1c9eb192e5a7e85f0a2036ce37a1bce7d1c502f009bf
echo hash('gost', $string);
//Такой же результат

Что не верно.
Пробовал генерировать хеш через утилиту rhash:
Программа RHash поддерживает вычисление ГОСТ Р 34.11-94 с тестовыми и CryptoPro параметрами и оба формата вывода хэша (по-умолчанию младшие байты первыми). Примеры вызова:
rhash --gost empty-file.txt
rhash --gost --gost-reverse empty-file.txt
rhash --gost-cryptopro empty-file.txt
rhash --gost-cryptopro --gost-reverse empty-file.txt

Но нужного результата я не получил, хотя и попробовал все эти примеры. Кстати первый вариант, считает такой же хэш, что и приведенный php код.

В общем, не знаю в какую сторону копать. Подскажите, как реализовать приведенный механизм на java с помощью php?
Спасибо!
  • Вопрос задан
  • 3350 просмотров
Решения вопроса 1
27cm
@27cm
TODO: Написать статус
В php 5.6 должно работать:
echo hash('gost-crypto', 'somestring');
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы