
사용자 인증을 위해 MySQL 백엔드가 있는 ProFTPD 서버를 실행하고 있습니다.
사용자의 비밀번호는 현재 일반 텍스트로 되어 있습니다. 제 목표는 모든 사용자가 암호화된 비밀번호를 데이터베이스에 저장하는 것입니다.
한 사용자로부터 하나의 비밀번호를 암호화하려면 다음 SQL 명령을 입력하면 됩니다.
update users set password= md5('MyPassword') where password="myPassword";
하지만 모든 사용자의 모든 비밀번호를 어떻게 암호화할 수 있습니까?
누구든지 나를 도울 수 있기를 바랍니다.
답변1
update users set password= md5('MyPassword') where password="myPassword";
MD5를 해시로 사용하는 것은 안전하지 않습니다. MD5는 더 이상 사용되지 않습니다.
안전한 해시 알고리즘은 PBKDF2, bcrypt, scrypt 등입니다. 또한 모든 해시 알고리즘은 솔트와 함께 사용해야 합니다. @Gerald Schneider는 이 주제에 대한 매우 좋은 링크를 게시했습니다.https://security.stackexchange.com/questions/211/how-to-securely-hash-passwords
여기서 문제는 이러한 저장 해시 알고리즘 중 어느 것도 mysql에서 구현되지 않는다는 것입니다. Mod SQL 모듈의 ProFTPD에는 PBKDF2에 대한 인증 모드가 있습니다. 그러나 OOTB에서는 PBKDF2 해시 비밀번호 또는 mysql 데이터베이스에서 다른 안전한 알고리즘으로 해시된 비밀번호를 생성할 수 있는 방법이 없습니다.
가능한 해결책은 PHP로 HTML 페이지를 만드는 것입니다. PHP에는 안전한 해시 비밀번호를 생성하기 위한 기능이 기본적으로 구현되어 있습니다.
나는 ProFTPD 포럼에서 이 문제에 대한 또 다른, 어쩌면 더 나은 답변을 아는 사람이 있는지 물었습니다. https://forums.proftpd.org/smf/index.php/topic,12110.0.html
예, 원래 질문은 어떻게 하나의 명령으로 내 데이터베이스의 모든 비밀번호를 한 번에 해시할 수 있느냐는 것이었습니다. 하지만 먼저 안전한 해시 알고리즘을 찾아야 한다고 생각합니다.