Добрый день.
Задача - отправить файлы методом 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?
Спасибо!