2012-09-02 1 views
0

비밀번호 보호에 대한 글을 읽고 코드가 올바른지에 대한 의견을 듣고 싶습니다. 복어와 crypt()을 함께 사용하여 누군가 암호를 해독하지 못하게하려고합니다. 또한, 나는 질문이있다. 암호를 저장할 때 변수가 $string이므로 로그인 할 때 다시 사용자를 확인할 때 사용할 수 있다고 가정합니다.블로우 피쉬와 크립트 성공 사례?

function unique_md5() { 
    mt_srand(microtime(true)*100000 + memory_get_usage(true)); 
    return md5(uniqid(mt_rand(), true)); 
} 

//unique_md5 returns a random 16 character string 

$string = '$2a$07$' . unique_md5(); 

$password = 'password'; 

$password = trim($password); 

$protected_password = crypt($password, $string); 

//then store the variables $string and $protected_password into the database 
+0

http://www.chilkatsoft.com/p/php_blowfish.asp - Google –

+0

'$ cleartext' 나는 암호화되는 것으로 가정하고 있습니까? – jason328

답변

3

블로우 피시는 소금 (유형 및 비용 매개 변수 제외)에 대해 22 자 문자열을 사용합니다. MD5는 문자열을 반환합니다.이 문자열은 crypt_blowfish에 의해 허용되지 않습니다. 적절한 소금을 사용하십시오.

+0

그래서 마지막 또는 처음 10 자 문자열을 잘라서 MD5를 반환 할 수 있다면 받아 들일 수 있습니까? 그렇지 않으면 MD5의 임의성을 제거 할 수 있습니까? – jason328

+0

@ jason328 : 괜찮습니다. –

+0

더 긴 소금을 제공하면 특수 처리가 필요없이 처음 22 자만 자동으로 사용됩니다. – lanzz

2

아니요, 이미 암호화 된 암호가 소금이 앞에 붙어있는 상태로 반환되기 때문에 암호화 된 암호로 소금을 저장할 필요가 없습니다. 일반 텍스트 비밀번호가 암호화 된 비밀번호와 일치하는지 확인하면 $crypted_password == crypt($plaintext_password, $crypted_password)인지 확인하면됩니다.