2012-02-25 2 views
1

Я попытался получить хэш SHA1 для строки юникода, некоторую китайскую строку в коде Java Java в Eclipse. Я использовал обычный MessageDigest класс и некоторый фрагмент кода Hex для преобразования из Интернета.Java SHA1 для unicode?

Интересно, как проверить правильность хеша и его шестнадцатеричное преобразование? Я вставил эту китайскую строку в ряд онлайн-хеш-конвертеров, но все они произвели другой хэш. То же самое покрытие отлично работает с строками ascii .

Я новичок в этом, поэтому некоторые указатели будут оценены!

br, perza

ответ

4

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

Какая у нас цель? Вам нужно сделать хеш-то, что некоторые другие код производит? Если да, узнайте, какую кодировку использует другой код для преобразования текста в двоичный. Если вам нужно только подобрать ваш код, у вас есть свободная рука - я бы предложил использовать UTF-8 или UTF-16, оба из которых гарантированно будут присутствовать на Java, обычно доступны на других платформах для будущих опций , и охватывают весь репертуар символов Юникода.

+0

Идея заключается в сохранении хеш-кода на сервере, а когда пользователь входит в систему с разных телефонов, на сервер передается только хеш. Таким образом, один и тот же хеш должен производиться в разных ОС. Простите мою новичку здесь, но кажется, что это работает только с чистым ascii, это правда? Таким образом, я предполагаю, что мне нужно преобразовать, например. сначала base64, затем SHA для совместимости между платформами? – perza

+0

@perza: Нет, абсолютно нет. Вам просто нужно каким-то образом преобразовать текст в двоичный код для начала - и использование UTF-8 или UTF-16 было бы уместным. Пока вы можете убедиться, что код на всех телефонах (и на сервере) использует ту же самую кодировку, все будет хорошо. –

+0

Итак, я предполагаю, что онлайновые генераторы хэшей не могут правильно обрабатывать строки юникода и, таким образом, дают разные результаты. Хорошо, я считаю, что это достаточно хороший ответ :) – perza

0

Что вы подразумеваете под "Online Hash Converters"?

Если вы подсчитали хэширование SHA1 некоторых Unicode-String, нет возможности вернуть String из Hash. Это ключ Хэш-функции, ее «одно направленный».

Вы можете использовать другой вариант реализации SHA и проверить, получаете ли вы такой же хэши в качестве результата.

+0

Возможно, правильная фраза будет «онлайн-хэш-генератором», например http://www.nitrxgen.net/hashgen/ – perza