Задать вопрос
mixtape774
@mixtape774
Занимаюсь Web, Desktop разработкой и реверсингом

Как переписать код с Java на PHP хеширование SHA1?

Привет друзья, помогите привести кусок кода на Java к PHP. Мои результаты различаются в плане итоговой подписи, не знаю что делать, в чем проблема.

Код на Java:
private static String bytesToStringSign(byte[] bArr) {
        StringBuilder stringBuilder = new StringBuilder();
        for (byte b : bArr) {
            stringBuilder.append(Integer.toString((b & 255) + 256, 16).substring(1));
        }
        return stringBuilder.toString();
    }

    public static String getSign(File file, String str) throws IOException, NoSuchAlgorithmException {
        InputStream fileInputStream;
        Throwable th;
        MessageDigest instance = MessageDigest.getInstance("SHA-1");
        try {
            fileInputStream = new FileInputStream(file);
            try {
                byte[] bArr = new byte[8192];
                int read = fileInputStream.read(bArr);
                while (read != -1) {
                    instance.update(bArr, 0, read);
                    read = fileInputStream.read(bArr);
                }
                if (read == -1) {
                    byte[] bytes = str.getBytes();
                    instance.update(bytes, 0, bytes.length);
                }
                String a = bytesToStringSign(instance.digest());
                if (fileInputStream != null) {
                    fileInputStream.close();
                }
                return a;
            } catch (Throwable th2) {
                th = th2;
                if (fileInputStream != null) {
                    fileInputStream.close();
                }
                throw th;
            }
        } catch (Throwable th3) {
            th = th3;
            fileInputStream = null;
            if (fileInputStream != null) {
                fileInputStream.close();
            }
            throw th;
        }
    }

    private static String main() {
    	File image;
    	String SECRET_STRING = "qwertyuiopasdfghjklzxcvbnmqwertyuiopas";
    	String result = getSign(image, SECRET_STRING);
    }


Реализация на PHP:
function GetImageSign($input_image) {
        // получаем 8192 первых байт данных изображения
	$data = substr($input_image['data'], 0, 8192);
	// добавляем секретную строку
	$data .= '"qwertyuiopasdfghjklzxcvbnmqwertyuiopas"';

	// полученный Java Hash - db6f43a2e43eec3e3b90ed9dc17df2a409675d64
	$ar = sha1($data, true);
	$size = strlen($ar);

	$str = '';
	for ($i = 0; $i < $size; $i++) {
		$str .= substr(dechex(((int)$ar[$i] & 255) + 256), 2);
	}
	print_r($str);
	die();
}


Буду признателен за любые найденные расхождения. Спасибо.
  • Вопрос задан
  • 463 просмотра
Подписаться 1 Оценить 1 комментарий
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 2
Чем стандартная функция вам не нравится? php.net/manual/ru/function.sha1.php
Если вам нужна sha1 для файлов то вот - php.net/manual/ru/function.sha1-file.php
Ответ написан
mixtape774
@mixtape774 Автор вопроса
Занимаюсь Web, Desktop разработкой и реверсингом
Я не джавист, поэтому неверно понял код изначально. Ошибка была глупая. Вопрос можно закрыть.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽