← Архив: Common Lisp

Шифрование пароля

Author: · 18.09.2012 08:48
· original author: lisomort
Создал тестовый проект (веб) с формой регистрации. Есть функция шифрования пароля.
(defun hash-password (password)
"Get hash code from string"
  (ironclad:byte-array-to-hex-string
   (ironclad:digest-sequence
    :sha256
    (ironclad:ascii-string-to-byte-array password)
)
)
)

использую для шифрование пароля перед записью в базу. Сама по себе работает правильно. Сам пароль берется из формы регистрации. Вот такой:
 <tr>
        <td class="td_left">Пароль</td>
        <td class="td_right"><input type="password" name="pass" id="pass_id" maxlength="20" size="40"
                   
                    value="" />
          <div class="mini">введено: <span id="pass_view">0</span></div>
        </td>
        <td class="td_info"><div id="pass_correct">пароль должен содержать от 4 до 20 символов</div></td>
      </tr>
В итоге при взятии инфы из формы хеш получается какой то странный. Потому что если ввести такой пароль просто захешировать вручную - хеш получается другой.
Вроде как он берет еще какой то непечатаемый символ. Такое возможно?
· original author: archimag
Попробуй вместо (ironclad:ascii-string-to-byte-array password)
Использовать
(babel:string-to-octets password :encoding :utf-8)
· original author: lisomort
Я не удивлен, что помогло. А чем это объясняется? Чтобы больше на грабли такие не наступать? Кодировка?
· original author: lisomort
Не совсем помогло...
При регистрации, на странице обработки формы выкинул через
(hash-password (hunchentoot:post-parameter "pass"))
хеш код того что было в поле формы. Такое же сделал при логине за этого юзверя. Хеши совпадают.
Но в базе почему то стоит хеш:
d7914fe546b684688bb95f4f888a92dfc680603a75f23eb823658031fff766d9
Чем он может изменяться при записи в базу? Установил кодировку в базе utf-8
· original author: lisomort
Нашел ошибку в коде. Спасибо за ответы
· original author: archimag
> Но в базе почему то стоит хеш:
Ну это, как там было в анекдоте "это же ваша база".
> Установил кодировку в базе utf-8
В данном случае кодировка в базе не важна, ибо хэш всегда будет ascii-строкой
> Чем он может изменяться при записи в базу?
Внутри компьютера джина нет, смотрите ваш код, что и как он делает.
· original author: archimag
Ну и хорошо, а то я забеспокоился )