![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,419
|
![]()
Мне понадобилось хешировать некоторый текст методом SHA1 (не будем вдаваться в подробности). Для этого я стал искать примеры реализации на Delphi. И нашел... Код я, как смог, доработал (заработал в Delphi 2010, правильный хеш пустой строки), но программа выдает неправильный хеш русского текста, т.е.
Текст:В чащах юга жил бы цитрус? Да, но фальшивый экземпляр! Википедия:9e32295f8225803bb6d5fdfcc 0674616a4413c1b Online HASH генератор:9e32295f8225803bb6d5fdfcc0674616a4 413c1b Моя программа:B2C19A50D47B89F9896AEF70F D6FB0F383F5E6BB HashTab:B2C19A50D47B89F9896AEF70FD6 FB0F383F5E6BB Кто прав? Код:
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись
![]() |
![]() |
![]() |
![]() |
#2 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]()
100% дело в исходной кодировке!
для русского текста она может быть (из широкораспространнённых) 866 (она же DOS, она же OEM) 1251 (она же Windows, она же ANSI) KOI8-R UNICODE (и тоже разные варианты и форматы).. p.s. берите хэш для текста, заданного в виде БАЙТ! ДОБАВЛЕНО У Вас подсчёт правильный, для строки, заданной в кодировке 1251: Цитата:
Последний раз редактировалось Serge_Bliznykov; 03.05.2011 в 09:03. |
|
![]() |
![]() |
![]() |
#3 |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
![]()
Распечатайте бумажку с надписью НЕ СУЩЕСТВУЕТ ТАКОЙ ВЕЩИ КАК "ПРОСТО ТЕКСТ" и повесьте себе на монитор
![]() Пока вы не говорите о том, в какой кодировке у вас находится строка, вы не сможете даже определить, где она заканчивается.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]()
GunSmoker, +1
а вот и ссылочка на статью (обычно эту ссылку сам GunSmoker публикует, но он, видимо, устал ![]() Абсолютный Минимум, который Каждый Разработчик Программного Обеспечения Обязательно Должен Знать о Unicode и Наборах Символов Это раз. второе. я провел исследование. и выяснил, что и википедия и ваш онлайт калькулятор вычисляют SHA для русского текста, заданного в формате UTF-8 (БЕЗ ЗАГОЛОВКА) поэтому, если есть желание получать идентичные результаты, задавайте исходную строку (или переводите её) в формат UTF-8 |
![]() |
![]() |
![]() |
#5 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,419
|
![]()
GunSmoker, да, насчет не указания кодировки я "ступил".
Serge_Bliznykov, спасибо за исследование) Я попробовал в OEM 866 переводить ту строчку, а про UTF-8 не догадался. Хотя именно в этой кодировке будет текст для хешинга (пытаюсь сделать генерацию Magnet URI по torrent файлу).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись
![]() |
![]() |
![]() |
![]() |
#6 |
Регистрация: 06.01.2008
Сообщений: 8
|
![]()
Пробую использовать unit sha1hash для получения hash из HEX строки, и просто на пролом ничего не получается
Код:
Код:
У меня похожая проблема как и у BDA ? ps использую Embarcadero® Delphi 10.2 |
![]() |
![]() |
![]() |
#7 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]()
так, а Вы знаете, что такое кодировка? Погуглите, например, ASCII.
Вы бред передаёте в #$12#$34#$56#$78 в Edit у Вас СТРОКА символов. каждый символ имеет свой код. для 1 этот код равен 49 ( в шестнадцатеричном виде это 0x31 == $31) для 2 этот код равен 40 ( в шестнадцатеричном виде это 0x32 == $32) и т.д. т.е ваша строка "12345678" в шестнадцатеричном виде будет 31 32 33 34 35 36 37 38 |
![]() |
![]() |
![]() |
#8 |
Регистрация: 06.01.2008
Сообщений: 8
|
![]()
проблема решилась через такую функцию
Код:
Код:
TEncoding.Default.GetString(StrAsBy tes), в оригинале там было UTF-8. я и сам осознавал что проблема в кодировке ![]() |
![]() |
![]() |
![]() |
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Паскаль. Файлы - Создать подпрограмму для заполнения файла латинскими и русскими буквами | Антон Лысенко | Помощь студентам | 2 | 15.12.2010 22:44 |
Фильтр ячеек с маленькими буквами и несколько большими буквами | Clockgen | Microsoft Office Excel | 8 | 24.11.2010 21:13 |
Дан файл, содержащий текст, записанный строчными русскими буквами. Получить в др.файле тот же текст, | develish151 | Microsoft Office Word | 4 | 05.05.2010 13:20 |
Пути с русскими буквами в Lazarus. | Alex Cones | Lazarus, Free Pascal, CodeTyphon | 4 | 30.03.2010 18:31 |
SMS русскими буквами | nimf | Общие вопросы Delphi | 10 | 13.02.2010 22:23 |