2010-03-26 2 views
3

1에서 40000까지의 숫자를 가져 와서 8 문자 해시를 생성하는 방법이 있습니까?PHP - 정수에서 8 문자 해시 생성

나는 base_convert을 사용하려고 생각했지만 강제로 8 문자 해시를 지정할 수는 없습니다.

도움이 될 것입니다.

답변

20

md5을 실행하고 처음 8자를 사용하지 않는 이유는 무엇입니까?

해시가 필요하기 때문에 부분을 삭제할지 여부는 중요하지 않지만 동일한 입력이 동일한 해시를 생성하는 것은 중요합니다. 여러 가지 방법이 있습니다

$hash = substr(md5($num), 0, 8); 
+3

감사합니다. 나는 잠 들어야한다. –

+3

내 번호 범위에서 충돌 할 가능성이 있습니까? – doc

+0

더 나은 본능은 나에게 아무 말도하지 않지만 ... 당신은 시험을하고 싶을지도 모릅니다. 40,000은 큰 숫자가 아니기 때문에 쉽게 테스트 할 수 있습니다. –

0

...

하나의 예

$x = ? 
$s = ''; 
for ($i=0;$i<8;++$i) 
{ 
    $s .= chr($x%26 + ord('a')); 
    $x /= 26; 
} 
+0

이 숫자의 기저부를 효과적으로 변경하는 것이 아닙니까? – nickf

+0

. 요청은 꽤 모호했습니다. 단지 8 문자 해시를 요청했습니다. – SteelBytes

+0

내가 막연하게 질문에 대해 유감스럽게 생각하는 것에 대해 죄송합니다. (정수에서 8 문자 해시를 생성하려고하지만 해시의 나머지 길이를 무언가로 채우고 싶지는 않습니다. 어떤 아이디어입니까? – doc

0
$hash = substr(hash("sha256",$num), 0, 8); 
+0

이것은 제 md5는 꽤 강합니다. 왜 sha256 이죠? –

+0

@ GeorgeEdison : md5는 꽤 약합니다. 충돌을 만드는 데 몇 시간이 걸립니다. – neo

4
>>> math.exp(math.log(40000)/8) 
3.7606030930863934 

따라서는 40000에서 8 자 해시를 생산하는 4 자리 - 기호가 필요합니다 :

sprintf("%08s", base_convert($n, 10, 4)) 
0

그래서 6 자리 숫자를 8 자리 숫자 문자열로 재현 할 수 있습니까?

물론 해시는 되돌릴 수 없습니다.하지만 소금/IV가 없으면 해킹하기가 쉽습니다. 더 나은 솔루션이 될 수 있습니다

substr(sha1($number . $some_secret),0,8); 

C. PHP를위한