2015-01-17 2 views
1

나는 php hash() 함수에 대해 매우 귀찮은 문제가 있습니다. 일부 문자열의 경우 반환 된 해시는 빈 문자열이며, 다른 문자열의 경우 제대로 작동합니다. PHP hash()는 빈 문자열을 반환합니다 ... 가끔

$new_salted_pw = $salt.$pepper.$new_pw; 
echo $new_salted_pw."... "; 
$hash = hash("sha256", $new_salted_pw); 
if($hash>120)  
    $hash = substr($hash, 120); 

echo $hash; 

내가 암호 geheim23 및 테스트 Geheim23을 사용, 그래서 단지 1 개 문자의 차이 :

나는 다음과 같은 썼다.

결과는 아니오

k0g3po32ggd0sv8oehgklbp2bd8eddxXMaxGTPJSQZSAJzgZSgaZxvUfGeheim23... d79e2044baa8a0a7363c88b4a2224277ac883eabc22cd28d61c1cdc31bb1c3fc

k0g3po32ggd0sv8oehgklbp2bd8eddxXMaxGTPJSQZSAJzgZSgaZxvUfgeheim23...

번째위한 해쉬. 그것은 비어 있습니다. 동일한 코드, 결과 없음.

훨씬 더 흥미롭게도 해시 geheim23은 문제없이 내 스크립트의 다른 부분에서 똑같은 방식으로 작동합니다.

그리고 Stackoverflow가 PHP가 나에게이 일을하고있는 이유, 해결 방법, hash() 대신 사용할 수있는 함수를 아는 경우 Stackoverflow에 문의하기로 결정했습니다.

감사합니다.

답변

2

hash() 기능에 문제가 없습니다! 문제는 substr() 함수에 있습니다. 이 변경해야합니다 :

(다음은 위치 (120)에서 시작,하지만 당신은 문자열 형태로 0 ~ 120 원하는)

$hash = substr($hash, 120); 

에 : 또한

$hash = substr($hash,0, 120); 

난 당신이 원하는 생각을 길이가 120보다 길고 해시 값이 120보다 크지 않은지 확인하려면

if($hash>120) 

다음으로 변경하십시오. 거기에서 http://php.net/manual/en/function.substr.php

그리고 견적 : 자세한 내용은

if(strlen($hash) > 120) 

에 대한 substr() 설명서를 참조

문자열 SUBSTR (INT $ 시작, 문자열 $ 문자열 [, INT의 $ 길이])

+1

오 하나님. 나는 너무 행복해. 나는 하루 동안 이렇게 싸워왔다. 심각하게 고마워. 그리고 힌트를 주셔서 감사합니다. 7 분 안에 수락 할 것입니다. – Thebananaking

+0

@ Thebananaking 당신을 환영합니다! 좋은 하루 보내세요 : D – Rizier123

0

암호 해시/확인에는 password_hash()password_verify()을 사용해야합니다.

이 함수는 PHP> 5.5에서 사용할 수 있지만 이전 버전의 새 프로젝트를 수행해야하는 이유는 알지 못합니다.

당신이를 사용해야하는 이유 몇 가지 포인트 :

  • 그것은 당신은 소금에 대해 걱정하지 않는다
  • 를 사용하는 것은 쉽다는
  • 그것은 암호 해시를 위해 만들어졌다
  • (등 MD5, 샤 *를 좋아하지)