2010-05-28 4 views
5

특정 Perl 관련 질문이 없습니다. DB에 연결하는 perl gui/wxperl 응용 프로그램을 빌드 중입니다. 내 응용 프로그램을 암호로 보호하려면 우선 사용자가 사용자와 암호를 입력 한 다음 응용 프로그램을 사용해야합니다.perl로 작성된 gui 응용 프로그램 인증

비밀번호를 저장하는 가장 안전한 방법은 사용자와 비밀번호를 어떻게 저장해야하는지, 그리고 인증을 위해 어떻게 검색해야하는지에 대한 가장 좋은 방법은 무엇인지 생각해 볼 수 있습니까? 가능하다면 누군가 어떻게 펄 코드를 제공 할 수 있습니까?

답변

9

암호를 일반 텍스트로 저장하지 않으려면 sha256을 사용하는 것이 좋습니다. Perl mod Digest :: SHA를 사용할 수 있습니다 (docs에 대해서는 CPAN 참조).

use Digest::SHA qw(sha256); 
my $digest = sha256($input_password); 
my $saved_digest_password = get_saved_password_for_user($input_user); 
if ($digest eq $saved_digest_password){ 
    # they have the correct password 
} 

이것은 단지 의사 코드이지만 시작하는 데 도움이됩니다. 어딘가 또는 파일 시스템이나 어딘가에 데이터베이스에 저장되어 있는지 여부에 관계없이 원하는대로 "get_saved_password_for_user"를 정의하는 것은 사용자의 몫입니다. 어디서나 $ input_password를 저장하거나 로깅하지 않도록하십시오. 저장할 필요가있는 유일한 것은 $ digest 암호입니다.

희망 하시겠습니까?

+1

+1 psuedocode와 마찬가지로 암호 매칭의 기본 사항에 이릅니다. – Axeman

+1

좋은 게시물이지만 서브 루틴 호출에'&'sigil을 사용하지 마십시오. 여기서는 필요 없으며 매우 구체적인 의미가 있습니다. 'get_saved_password_for_user()'는 여기에서 재정의되어야 할 프로토 타입을 가지고 있습니까? 자세한 정보는 http://www.perlfoundation.org/perl5/index.cgi?subroutines_called_with_the_ampersand를 참조하십시오. – daotoad

+0

이것은 매우 좋은 답변이지만 perl은 opensource라는 것을 알고 있기 때문에 if ($ digest eq $ saved_digest_password)를 으로 변경하면 ($ digest ne $ saved_digest_password) 모든 잘못된 암호를 입력하면 다른 사람이 아이디어를 가질 수 있습니다. 어떻게 우아한 방식으로 이것을 해결할 수 있을까요? – oren

관련 문제