2015-01-22 6 views
4

echo crypt('test', "$2a$07$");은 PHP 버전 5.4.16에서 긴 해시를 생성하지만 5.6.4에서는 "실패 문자열"*0을 생성합니다.PHP crypt()는 버전 5.6.4에서 * 0 실패 문자열을 반환하지만 5.4가 아니라

crypt()에서 PHP 문서를 읽는 중 이유에 따라 대신 *1이 반환된다고 언급되어 있지만 여전히 명확하지 않습니다. (http://php.net/manual/en/function.crypt.php)

이 경우에 *0이 반환되는 이유는 무엇입니까? PHP가 5.4 이전에 양식의 악염을 용납하지 않았습니까 $2a$07$?

답변

6

Blowfish 정의는 세 번째 $ 다음에 문자열을 정의해야한다고 말합니다. 다음

<?php 
echo crypt('test', "$2a$07$mystring"); 
?> 

복어 염으로 해싱 "$의 2A을 $", "$ 2 배 $"또는 "$의 2Y을 $", 두 자리 선정 된 파라미터, "$", 및 22 개 문자 알파벳 "./9A-Za-z"

해당 문자열을 정의하지 않으면 *0 오류가 발생합니다.

5.6.5 오류 문자열 "* 0"이 소금으로 제공되면 다른 암호 구현과의 일관성을 위해 "* 1"이 반환됩니다. 이 버전 이전에는 PHP 5.6이 DES 해시를 잘못 반환했습니다.

+0

나는 열 번처럼 (심지어 내 질문에 그것과 연결되어있다) 읽었지만 어떤 이유로 그것을 고집하지 않았다. 이봐. 감사. – user49438