2010-09-21 3 views
0

Я пытаюсь создать двухсторонний алгоритм шифрования для моих паролей пользователей. Мне нужно, чтобы он был зашифрован, но без предварительно установленного пароля для шифрования (что я установил) (соль?) Исходный пароль не может быть расшифрованPHP Двустороннее шифрование с солью

+1

Зашифрованные данные всегда могут быть дешифрованы при использовании одного и того же ключа. Это [определение шифрования] (http://en.wikipedia.org/wiki/Encryption). Я предполагаю, что вы скорее имеете в виду [криптографическое хеширование] (http://en.wikipedia.org/wiki/Cryptographic_hash_function). – Gumbo

ответ

2

Похоже, вы хотите использовать одностороннее криптографическое хеширование, способ шифрования. Вот хороший пример лучшей практики хранения и проверки пароля:

Чтобы сохранить его:

$ userPasswordInput = $ _POST [ 'пароль'];

$ соль = // в идеале, сгенерировать случайным образом и сохранить его в БД, в противном случае используйте константу сохраненную в файле PHP

$ Password = sha1 ($ userPasswordInput $ соль.);

Сохраните $ пароль (и желательно $ salt) в db. При сравнении, объедините соль и пользовательский ввод, sha1 it (или любое шифрование), затем сравните его с сохраненным (зашифрованным + соленым) паролем.

+0

Я полагаю, это будет работать для шифрования, но. Я не могу расшифровать его и вернуть пароль с помощью $ salt? – Daniel

2

Для двухстороннего шифрования это называется «ключ», а не «соль». Проверьте функции mcrypt.

+1

Я собираюсь использовать это на нескольких серверах/сайтах с PHP. большинство из них не имеют установленного расширения. Было бы сложно обновить каждый сервер и сайт. – Daniel

+0

Мне нужно что-то, что встроено в php – Daniel

+0

Я просто ищу пару функций, которые я могу использовать для кодирования и декодирования хэша, я хочу, чтобы хеш был только декодируемым, если был использован правильный ключ (тот, который вводился при кодировании) – Daniel

0

я сделал это так:

создать $ пользователя + $ пароль

$saltedHash = md5($salt.$password); 

теперь у вас есть зашифрованный пароль ($ saltedHash), чтобы сохранить его в БД.

Если кто-то пытается войти в систему, вы делаете то же самое с введенным паролем и сравниваете его с одним в db.

0

Самый простой способ (хотя и очень расточительный с точки зрения хранения) - создать случайную строку и XOR ее к паролю. (Как уже указывал кто-то, это называется ключом, а не солью.) Это называется one-time pad. Как следует из названия, вы не можете повторно использовать один и тот же ключ для нескольких паролей.

Смежные вопросы