2012-06-22 3 views

답변

4

는 간단한 uniqid(mt_rand(), true)은 임의의 소금을 생성 할 것입니다. 복어와 결합하면 꽤 좋은 암호 해시를 제공해야합니다.

대체물은 /dev/urandom 또는 openssl_pseudo_random_bytes()과 같은 의사 랜덤 소스입니다. 또한 무작위 데이터를 생성하는 서비스 (라디오 활성 저하를 기반으로)가 있습니다.

+0

나는 [link] (http://php.net/openssl_random_pseudo_bytes)에서 openssl_random_pseudo_bytes()라고 생각합니다. –

2

http://codahale.com/how-to-safely-store-a-password/

한 가지 방법이 문서에서 살펴 어쩌면 당신은이 글 또한 http://www.gregboggs.com/php-blowfish-random-salted-passwords/

에 유용한 무언가를 찾을 것입니다 .. 비 무작위 대신 임의 소금 사용을 고려하는 것은을 생성하는 것입니다 고유 한 소금을 모든 사용자에게 제공하고 그 소금을 DB에 저장하십시오.

또 다른 좋은 접근 방법은 암호를 해시를 생성하는 알고리즘이 두 번째 이상의 소금을 계산해야합니다 (). 더 복잡한 당신의 해싱 알고리즘이 될 것이다 - 더 문제는 당신이 PHP에 microtime() 기능을 사용할 수 있습니다

$salt = bin2hex(mcrypt_create_iv(32, MCRYPT_DEV_URANDOM)); 
+0

"나는 반드시 두 번째 이상의 소금을 계산해야합니다."라는 말을 이해하지 못합니다. 실행하는 데 1 초 이상이 걸릴 것입니까? 이것에 대해 자세히 설명해주십시오. – nullability

+0

@nullability 예, 실행하는 데 1 초 이상 – Ribtoks

3

사용이 줄을 해킹하고 싶은 사람을 직면하게 될 것이다 초 단위가 아닌 마이크로 초를 기준으로 숫자를 생성하므로 사용자가 다른 사용자와 같은 소금을 가질 수 없습니다. 이 번호에 사용자 ID를 곱할 수도 있습니다.

어쩌면 md5(uniqid())이면 소금으로도 충분할 수 있습니다.

편집 : uniqid() 기능으로 more_entropy 매개 변수를 언급하는 것을 잊었습니다. 그것은 낮은 동일한 문자열의 가능성 함수가 동일한 마이크로에서 두 번 실행되므로 편집 기능과 같아야도됩니다 많은 경우에

$salt = md5(uniqid($user_id, TRUE)); 
1

PHP 강한 소금을 생성하여 DB를

관련 문제