id: Гость   вход   регистрация
текущее время 12:04 25/04/2024
Автор темы: Гость, тема открыта 11/05/2007 12:11 Печать
создать
просмотр
ссылки

PHP скрипт


День добрый.
Попал в руки вот такой вот скриптик на пхп.
Меня интересует можно ли написать обратную функцию для
расшифровки.
В пхп не силён но очень надо.
Может данный форум не слишком для этого подходит но всё же.
Если у кого есть время и желание...
Если нет то скажите она обратимая или нет и всё.
Заранее спасибо.



 
Комментарии
— SATtva (11/05/2007 16:04)   профиль/связь   <#>
комментариев: 11558   документов: 1036   редакций: 4118
Это 128-битовая функция хэширования. В плане коллизий вряд ли достаточно стойкая, но непосредственно найти прообраз (обратить результат) Вам вряд ли удастся.
— Amin (12/07/2007 19:23)   <#>
И еще глючная ...

Допишите после объявления этой функции такой код :
print '<table width="80%" border="1px"><tr><td>Plain-text</td><td>encrypt</td></tr>';
for ($i = 0; $i < 1000; $i++) { print '<tr><td>'.$i.'</td><td>'.encrypt($i).'</td></tr>'; };
print '</table>';

При значениях $i = {62, 83, 620-629, 830-839} она выдает какие-то малость неадекватные значения &)
— SATtva (12/07/2007 20:20, исправлен 12/07/2007 20:24)   профиль/связь   <#>
комментариев: 11558   документов: 1036   редакций: 4118
Да уж. А вот ещё характерный пример:
5890xb534382b6afddbdbee7751519c062020
5900xb5b47baaeb7c5a5a6ff6d0d01d87a1a1
5910xb5b4fbe9a83f19192cb593935ec4e2e2
5920xb5b47b2968ffd9d9ec7553539e042222
5930xb5b4fb6829be9898ad341212df456363
5940xb5b47ba8e97e58586df4d2d21f85a3a3
5950xb5b4fbefae391f1f2ab3959558c2e4e4
5960xb5b47b2f6ef9dfdfea73555598022424
5970xb5b4fb6e2fb89e9eab321414d9436565
5980xb5b47baeef785e5e6bf2d4d41983a5a5
5990xb5b4fbedac3b1d1d28b197975ac0e6e6

Корреляции впечатляют. Это только то, что походя заметил невооружённым глазом.
— SATtva (12/07/2007 20:28)   профиль/связь   <#>
комментариев: 11558   документов: 1036   редакций: 4118
В этом же примере:
  • Байт 5 в {590-599} чередуется между 7 и f.
  • Байт 31 циклически пробегает через последовательность a-e-2-6.
Отличный эксперимент, Amin.
— Amin (13/07/2007 11:13)   <#>
После прочтения "Прикладной криптографии" я очень подозрительно стал относится к самопискам в области крипто.

Причем мне непонятна сама идея самописных хэш-функций на РНР при разработке приложений. Если надо хранить парольные хэши для сайта/форума/учетки, вполне достаточно воспользоваться стандартной функцией MD5 / SHA1, даже если их стойкость вызывает вопросы. Поскольку в штатном режиме эти данные просто так не доступны, а если сервер уже похакали и есть возможность поправить таблицу пользователей ручками, то извращения с самописными функциями становятся бессмысленными.

Вот почему люди думают, что они "нахрапом", без глубоких математических знаний сделают более хорошую хэш-функцию, чем скажем MD5 ?
— Amin (13/07/2007 11:23)   <#>
предлагаю для автора более простое решение :

function encrypt($str) { return sha1($str); }
/* ТОЛЬКО НИ В КОЕМ СЛУЧАЕ НЕ sha1( encrypt($str) ) !!! */

Будет на порядок прямее и надежнее. Также надо подумать, нужно ли вообще отдельно переопределять (переименовывать) функцию вычисления хэша, если она используется буквально в паре мест ?
— sentaus (13/07/2007 12:44)   профиль/связь   <#>
комментариев: 1060   документов: 16   редакций: 32
Это только то, что походя заметил невооружённым глазом.

И то не всё заметили. На самом деле нулевой и первый байты всегда равны, а не только их младшие 4 бита (я нумерую байты с нуля от младшего к старшему)
Кроме того 4-й и 5-й тоже всегда равны.
— SATtva (13/07/2007 14:49)   профиль/связь   <#>
комментариев: 11558   документов: 1036   редакций: 4118
Причем мне непонятна сама идея самописных хэш-функций на РНР при разработке приложений.

Помимо вопросов безопасности есть ещё и чисто практические аспекты. При желании, можно написать SHA-1 или любой другой криптоалгоритм и на чистом PHP, но такая реализация при любых оптимизациях будет на порядок медленнее низкоуровневого кода на Си.
— Amin (13/07/2007 18:31)   <#>
учитывая, что в самом РНР уже есть встроенные !!! Функции md5() и sha1(), это выглядит странным =) Я могу понять, если бы писали ту функцию, которой нет в РНР, но в 99.9% веб-приложений двух вышеобозначенных должно быть достаточно.

Наверняка применялась для хэширования паролей или чего-нить подобного. Насколько я понял из творений Шнайера, таких мега-функций ежедневно пишут тысячи =(
Ваша оценка документа [показать результаты]
-3-2-1 0+1+2+3