2013-10-16 3 views
0

몇 가지 간단한 유효성 검사를 수행하는 사용자 클래스가 있습니다. phpass를 사용하여 모든 암호를 해시로 저장하려고합니다. 그러나, 나는 해시를 설정하는 User 클래스의 일이되기를 원하지 않는다. 이것은 다른 함수의 일이다. 따라서 setPassword라는 간단한 함수가 있다면 어떻게 암호가 해시인지 확인할 수 있습니다. is_binary가 작동합니까 ?? 나는 여기에 해시를 비교하지 않고있다. 나는 암호가 해시인지 확인하고 싶다. 어떤 종류의 md5 .. sha1 ... ㅋ. 나는 그 암호가 해시인지 확인하기 만하면된다.암호가 해쉬인지 확인하는 방법 - PHP

예 :

class User 
{ 
    private password = NULL; 
    private $errors = array(); 

    public function setPassword($password) 
    { 
     // make sure password is a hash...pseudo code 
     if (!password_is_hash($password)) 
     { 
      $this->errors[] = 'Invalid password'; 
      return $this; 
     } 
     $this->password = $password; 
     return $this; 
    } 

    public function getPassword() 
    { 
     return $this->password; 
    } 
} 
+3

"해시"란 무엇을 의미합니까? 'md5 ('foo')'는 해시'acbd18db4cc2f85cedef654fccc4a4d8'를 뱉어 내며, 이것은 또한 스스로 완벽하게 유효한 암호가 될 수 있습니다 ... 기술적으로 ** ANY ** 32char 16 진수 문자열은 md5 해시입니다. 그것이 무엇의 해시인지 말해. –

+0

예. 암호가 데이터베이스에서 들어오고 나가는 것과 같은 암호가 아닌지 확인하는 방법이 있습니까? 사용자가 비밀번호를 게시 할 수 있다고 생각합니다. 가장 좋은 방법은 없을 것입니다. setPassword 함수를 사용하여 데이터베이스에 들어오고 나가는 것이 해시 된 암호인지 확인해야합니다. 그래서 myfavoritepassword. – user2707535

+0

일반적으로 암호 해싱은 도메인 개체가 아닌 * 인증 *의 일부가됩니다. * 해시 된 암호 만 전달합니다. – AlexP

답변

0

해시는 문자열이며 조건에 따라 md5 또는 sha1이 항상 n 문자라고 말할 수 있지만 주어진 문자열 해시입니다.

사용자가 제공 한 암호와 db에 저장된 해시를 비교하면 저장된 해시를 데이터베이스에서 가져온 다음 저장된 해시를 생성하는 데 사용 된 것과 동일한 함수로 제공된 문자열을 해시 할 수 있습니다. 그들은 동등하고 인증됩니다.

+0

좋아, 고맙다 나는 문자열과는 별도로 해시 된 암호를 설정하는 것이 있었으면 좋겠다고 생각했지만 나던 것은별로 의미가 없다고 생각한다. – user2707535

0

모든 해시는 문자열입니다. 따라서 해시인지 정확하게 확인할 수 없습니다. MD5 해시는 a23b34c45d56a23b34c45d56a23b34c4처럼 보이며 사용자는 myrealreallooooongpassword111222과 구별 할 수 없습니다.

+0

만약 당신이 무슨 해시 알고리즘이 사용되고 있는지 알고 있다면? 이 게시물 에서처럼. http://stackoverflow.com/questions/247304/mysql-what-data-type-to-use-for-hashed-password-field-and-what-length. phpass는 BCrypt를 사용합니다. – user2707535

+0

@ user2707535 - 나는 당신이 대답을 이해했다고 생각하지 않습니다. 모든 해싱 알고리즘의 결과를 얻을 수 있으며 암호 상자에 입력하면됩니다. 그것이 어디서 왔는지 어떻게 알 수 있습니까? –

+0

여기 논리가 엉망이라고 생각합니다. 큰 그림을 설명 할 수 있습니까? 주어진 문자열이 해시인지 아닌지를 확인해야하는 상황을 상상할 수 없습니다. – Yaroslav

0

나는 당신이 무엇을하려고하는지 잘 모르겠다. 그러나 왜 암호가 해시인지 아닌지를 생각하고있다.

함수/라이브러리를 사용하여 해시를 만들면 해시가 성공적으로 완료되었는지 여부를 해당 함수에서 확인할 수 있습니다.

문자열 이외에도 문자열이 해시 (ed)인지 여부를 확인할 수 없습니다.

0

항상 정확하고 안전한지 확실하지 않지만 password_get_info 기능을 사용할 수 있습니다. 메서드가 알고리즘을 추측 할 수없는 경우 문자열이 해시가 아니라고 가정 할 수 있습니다.

function password_is_hash($password) 
{ 
    $nfo = password_get_info($password); 
    return $nfo['algo'] != 0; 
} 

sha1 또는 md5와 같은 간단한 알고리즘에서는 작동하지 않습니다.

관련 문제