1에서 40000까지의 숫자를 가져 와서 8 문자 해시를 생성하는 방법이 있습니까?PHP - 정수에서 8 문자 해시 생성
나는 base_convert
을 사용하려고 생각했지만 강제로 8 문자 해시를 지정할 수는 없습니다.
도움이 될 것입니다.
1에서 40000까지의 숫자를 가져 와서 8 문자 해시를 생성하는 방법이 있습니까?PHP - 정수에서 8 문자 해시 생성
나는 base_convert
을 사용하려고 생각했지만 강제로 8 문자 해시를 지정할 수는 없습니다.
도움이 될 것입니다.
md5
을 실행하고 처음 8자를 사용하지 않는 이유는 무엇입니까?
해시가 필요하기 때문에 부분을 삭제할지 여부는 중요하지 않지만 동일한 입력이 동일한 해시를 생성하는 것은 중요합니다. 여러 가지 방법이 있습니다
$hash = substr(md5($num), 0, 8);
...
하나의 예
$x = ?
$s = '';
for ($i=0;$i<8;++$i)
{
$s .= chr($x%26 + ord('a'));
$x /= 26;
}
이 숫자의 기저부를 효과적으로 변경하는 것이 아닙니까? – nickf
. 요청은 꽤 모호했습니다. 단지 8 문자 해시를 요청했습니다. – SteelBytes
내가 막연하게 질문에 대해 유감스럽게 생각하는 것에 대해 죄송합니다. (정수에서 8 문자 해시를 생성하려고하지만 해시의 나머지 길이를 무언가로 채우고 싶지는 않습니다. 어떤 아이디어입니까? – doc
$hash = substr(hash("sha256",$num), 0, 8);
이것은 제 md5는 꽤 강합니다. 왜 sha256 이죠? –
@ GeorgeEdison : md5는 꽤 약합니다. 충돌을 만드는 데 몇 시간이 걸립니다. – neo
>>> math.exp(math.log(40000)/8)
3.7606030930863934
따라서는 40000에서 8 자 해시를 생산하는 4 자리 - 기호가 필요합니다 :
sprintf("%08s", base_convert($n, 10, 4))
그래서 6 자리 숫자를 8 자리 숫자 문자열로 재현 할 수 있습니까?
물론 해시는 되돌릴 수 없습니다.하지만 소금/IV가 없으면 해킹하기가 쉽습니다. 더 나은 솔루션이 될 수 있습니다
substr(sha1($number . $some_secret),0,8);
C. PHP를위한
: 그 고정 누구든지
$seed = 'JvKnrQWPsThuJteNQAuH';
$hash = sha1(uniqid($seed . mt_rand(), true));
# To get a shorter version of the hash, just use substr
$hash = substr($hash, 0, 10);
감사합니다. 나는 잠 들어야한다. –
내 번호 범위에서 충돌 할 가능성이 있습니까? – doc
더 나은 본능은 나에게 아무 말도하지 않지만 ... 당신은 시험을하고 싶을지도 모릅니다. 40,000은 큰 숫자가 아니기 때문에 쉽게 테스트 할 수 있습니다. –