Я хотел бы зашифровать пароли на моем сайте, используя двухстороннее шифрование в PHP. Я столкнулся с библиотекой mcrypt, но она кажется такой громоздкой. Кто-нибудь знает о других методах, которые проще, но еще безопасны? У меня есть доступ к Zend Framework, поэтому решение, использующее его, также будет работать.
Мне действительно нужно двухстороннее шифрование, потому что мой клиент хочет войти в db, изменить пароль или получить его.
Вы должны хранить хэшированные пароли (и правильно соленые ).
В мире нет оправдания, который достаточно хорош, чтобы нарушить это правило.
В настоящее время использование крипты с использованием CRYPT_BLOWFISH – лучшая практика.
CRYPT_BLOWFISH в PHP – это реализация хэша Bcrypt. Bcrypt основан на блочном шифре Blowfish.
Если ваш клиент пытается войти в систему, вы вводите введенный пароль и сравниваете его с хешем, хранящимся в БД. если они совпадают, доступ предоставляется.
Если ваш клиент хочет изменить пароль, ему нужно будет сделать это через небольшой скрипт, который правильно хэширует новый пароль и сохраняет его в БД.
Если ваш клиент хочет восстановить пароль, необходимо создать новый случайный пароль и отправить его клиенту. Хэш нового пароля хранится в БД
Если ваши клиенты хотят найти текущий пароль, им не повезло . И это точно точка хеширования пароля: система не знает пароль, поэтому его никогда нельзя «искать» / украдены.
Джефф сообщил об этом: вы, вероятно, храните пароли неверно
Если вы хотите использовать стандартную библиотеку, вы можете взглянуть на: Переносимость хэширования PHP PHP и убедиться, что вы используете алгоритм CRYPT_BLOWFISH.
(Вообще говоря, возиться с записями в вашей базе данных напрямую – это проблема.
Многие люди, в том числе очень опытные администраторы БД, обнаружили, что это трудно.)
Не шифруйте пароли. Вам действительно не нужно расшифровывать их, вам нужно только проверить их. Использование mcrypt не намного лучше, чем вообще ничего не делать, поскольку, если хакер ворвался на ваш сайт и украл зашифрованные пароли, они, вероятно, также смогли бы украсть ключ, используемый для их шифрования.
Создайте единую функцию «пароль» для вашего приложения php, где вы берете пароль пользователя, объединяете его с солью и запускаете полученную строку через хэш-функцию sha-256 и возвращаете результат. Всякий раз, когда вам нужно проверить пароль, вам нужно только проверить, соответствует ли хэш пароля совпадению хеша в базе данных.
Когда вам действительно нужно получить пароли позже, вы должны, по крайней мере, использовать закрытые и открытые ключи, чтобы злоумышленнику понадобился закрытый ключ (который не должен храниться на том же компьютере), чтобы расшифровать пароли.
2 функции для достижения этой цели – openssl_public_encrypt()
и openssl_private_decrypt()
Либо сохраните его в ящике, либо сохраните хэш (т. Е. НЕ обратимый) пароля.
Выполнение чего-либо еще – особенно с использованием симметричного шифрования с жестко закодированным ключом – в принципе бессмысленно.
Если вы делаете то, что вы предлагаете, и ваша машина была скомпрометирована, злоумышленник получает доступ не только к зашифрованным паролям, но также к коду и ключу для их расшифровки, поэтому они могут также храниться в ясности.
Если вы хотите защитить свои данные от кого-то, кто получает физический доступ к машине, используйте зашифрованную файловую систему (но сохраните пароль в ящике в базе данных). Конечно, каждая перезагрузка, вам нужно будет вручную ввести ключ, прежде чем система будет использоваться.