Задать вопрос
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();
}


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

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

Похожие вопросы