Проблема с получением того же ша256 из числа с плавающей запятой в Java, что и в php - PullRequest
0 голосов
/ 02 мая 2020

У меня проблема с созданием того же ха sh (SHA256) в Java как и в PHP.

Эта PHP функция

<?php
echo hash('sha256', 1.00);

возвращает га sh

6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b

http://sandbox.onlinephpfunctions.com/code/cc5ed1eb8b72e8e18774c39404f9be84be00e551

Моя цель - получить то же га sh в Java, но когда я пытаюсь

org.apache.commons.codec.digest.DigestUtils.sha256Hex()

всегда я получаю значения, отличные от PHP. Я пытался преобразовать Double, BigDecimal или стандартный float в байтовый массив, а затем попытался получить sh. Но это не помогает. Что мне делать?

Ответы [ 2 ]

0 голосов
/ 02 мая 2020

php на самом деле не хэширует значение с плавающей запятой, вместо этого он преобразует его в однобайтовую строку «1». Просто введите 1 в этот онлайн-инструмент , чтобы убедиться в этом.

В Java вы получите тот же результат с:

MessageDigest.getInstance("SHA-256").digest(new byte[]{(byte) '1'});
0 голосов
/ 02 мая 2020

Вы путаете float с String. Вы передаете 1.00 как параметр в php, который является float. Попробуйте с "1.00":

// php
echo hash("sha256", "1.00");

// java
System.out.println(DigestUtils.sha256Hex("1.00"));
...