2013-01-16 2 views
-1

Я читаю код в этом page, где автор генерирует случайный токен. Я все понимаю, кроме как «строка 29», где он делит токен на куски и записывает их с помощью md5. Мои вопросы:Маленький фрагмент кода Пояснение

1) Почему он не сделал хэш весь токен, но разделил их и хэшировал их кусками?

2) Будет ли хэширование их в кусках доставлять те же результаты, что и хеширование неразделенного токена?

3) На «линии 36» он также делает некоторые подстроку, которые я думаю, может уменьшить количество символов. При этом хеш-маркер может быть восстановлен до оригинального непроверенного токена?

Вот самая важная часть кода ::

# Array indice friendly number of chars; empty token string 
    $numChars = count($chars) - 1; $token = ''; 

    # Create random token at the specified length 
    for ($i=0; $i<$len; $i++) 
     $token .= $chars[ mt_rand(0, $numChars) ]; 

    # Should token be run through md5? 
    if ($md5) { 

     # Number of 32 char chunks 
     $chunks = ceil(strlen($token)/32); $md5token = ''; 

     # Run each chunk through md5 
     for ($i=1; $i<=$chunks; $i++) 
      $md5token .= md5(substr($token, $i * 32 - 32, 32)); 

     # Trim the token 
     $token = substr($md5token, 0, $len); 

    } return $token; 
} 

Я надеюсь, что кто-то поможет мне получить немного понимания. Благодаря

EDIT

4) Почему он использовал 32 внутри функции SUBSTR()?

+1

Почему бы вам не спросить его? – GordonM

+1

Этот код предназначен для генерации случайных строк. Он хэшировал куски, а не все, потому что чувствовал это. Должно быть, он чувствовал, что это делает его более случайным. –

+0

Где линия 26 и 33? Можете ли вы указать свои строки кода? –

ответ

5

md5() - односторонний хеш-алгоритм. Это означает, что он не может быть восстановлен в первоначальном виде.

Чтобы ответить на вопрос 1, он создает более безопасный хэш. Общие строки могут быть сопоставлены с их известными значениями хеширования. Это помогает предотвратить это.

2) Нет. Каждый раскол даст вам другой результат, который в этом случае сделает его более безопасным.

И ваше редактирование для номера 4, третий параметр (32) задает длину возвращаемой строки. Предлагаю вам ознакомиться с руководством по PHP. Это отличный ресурс.

1
  1. код (может) необходимо создать токен длиной более 32 символов.
  2. нет
  3. нет
  4. потому md5() возвращает строку 32 символов, и он должен создать необходимые маркер длиной 32 символов, в то время.
Смежные вопросы