Md5 шифрует Cookiedata с сериализованным массивом - PullRequest
0 голосов
/ 18 ноября 2009

Я пытался зашифруйте данные cookie с помощью md5, но я не могу проверить обратно хэш.

Это связано с тем, что cookie_data является сериализованным массивом , потому что нормальные строковые значения работают нормально.

Это на самом деле из класса codeigniter, но он не работает ?? Кто-нибудь знает, в чем может быть проблема?

$hash    = substr($session, strlen($session)-32); 
$session= substr($session, 0, strlen($session)-32); 

if ($hash !==  md5($session.$this->encrypt_key))
{........

и значение cookie зашифровано следующим образом

$cookie_data = $cookie_data.md5($cookie_data.$this->encrypt_key);

EDIT Я обнаружил, что ответ заключается в использовании urlencode en urldecode в процессе создания и проверки Хэши md5, потому что setcookie выполняет urlencode автоматически, и, следовательно, возможно, меняет хеш.

спасибо, Ричард

Ответы [ 3 ]

4 голосов
/ 19 ноября 2009

У вас есть опечатка:

md5($sessie.$this->encrypt_key))

должно быть

md5($session.$this->encrypt_key))

Если вы разрабатываете с включенными уведомлениями, вы поймете такие вещи намного легче.

Вы не шифруете своих данных, вы подписываете это.

2 голосов
/ 19 ноября 2009

md5 - это односторонняя функция. Он не является обратимым, поэтому вы не можете расшифровать данные.

Единственное, что вы можете сделать, - это зашифровать исходные данные (если вы сохранили их в другом месте) и проверить результат этого второго вычисления.

Если полученное значение и новое вычисленное значение совпадают, полученный вами хеш является действительным (как вы делаете в своем коде).

EDIT

Знаете, всего с тремя строками кода я угадаю несколько возможных причин:

  1. $ session не содержит в начале кода того же значения cookie_data.
  2. вы используете многобайтовые строки, а strlen не поддерживает mb (используйте идиомы substr ($ session, 0, -32) для получения части строки с полезной нагрузкой.
  3. может быть, substr также не справляется с многобайтовыми строками, используйте явно mb_substr (или как он там называется).

Для меня первый случай более вероятен. За то, что я вижу.

1 голос
/ 19 ноября 2009

Я пытался зашифровать файл cookie данные с md5, но не могу расшифровать вернуть для проверки.

md5 не является методом шифрования. он создает односторонний хэш, который не может быть возвращен в исходные данные.

Если вы хотите зашифровать данные, попробуйте mcrypt

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...