나는 예를 들어, Joe
아무 문제없이 사용자 이름 joe
로 로그인 할 수 있습니다 로그인 시스템대소 문자 구분 사용자 이름과 암호 염은
에게 있습니다.
현재 사용자 이름을 소금으로 사용하는 암호 암호화를 사용하고 있습니다. 로그인 문제가 발생합니다. 예를 들어,
SELECT * FROM `users` WHERE LOWER(`username`) = LOWER(`:username`)
$stmt->bindValue(':username', $_POST['user']);
이 작동합니다. 당신이 볼 수 있듯이 사용자가이 이것에 해결되어 joe
대신
Joe
의로 로그인 때문에
SELECT * FROM `users` WHERE LOWER(`username`) = LOWER(`:username`)
AND `password` = :password
$stmt->bindValue(':username', $_POST['user']);
$stmt->bindValue(':password', encrypt($_POST['password'], $_POST['user'])); //encrypt(password, salt)
는, 암호 암호화 데이터베이스 확인하지 않을 : 문제는 암호를 포함 소금으로 다른 것을 사용해야합니까? 그렇다면 무엇을 소금으로 사용해야합니까? 이것은 내 암호화 기능입니다 :
function encrypt($password, $salt) {
return base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($salt), $password, MCRYPT_MODE_CBC, md5(md5($salt))));
}
소금으로 사용자 이름을 사용하는 것은 좋은 생각이 아닙니다. 소금은 적당히 길고, 무작위이며, ASCII가 아니어야합니다. 또한 사용자가 암호를 변경할 때마다 변경해야합니다. – SLaks
@SLaks 아, 그럼 그 소금을 저장해야할까요? – Norse
@ 노르웨이 : 맞아. – SLaks