Base64은 난수 값을 암호로 인코딩합니다.
<?php
// get 72 pseudorandom bits in a base64 string of 12 characters
$pr_bits = '';
// Unix/Linux platform?
$fp = @fopen('/dev/urandom','rb');
if ($fp !== FALSE) {
$pr_bits .= @fread($fp,9);
@fclose($fp);
}
// MS-Windows platform?
if (@class_exists('COM')) {
// http://msdn.microsoft.com/en-us/library/aa388176(VS.85).aspx
try {
$CAPI_Util = new COM('CAPICOM.Utilities.1');
$pr_bits .= $CAPI_Util->GetRandom(9,0);
// if we ask for binary data PHP munges it, so we
// request base64 return value. We squeeze out the
// redundancy and useless ==CRLF by hashing...
if ($pr_bits) { $pr_bits = substr(md5($pr_bits,TRUE), 0, 9); }
} catch (Exception $ex) {
// echo 'Exception: ' . $ex->getMessage();
}
}
$uid = base64_encode($pr_bits);
?>
이것은 12 개의 문자로 된 가장 순수한 컬럼비아 사람의 72 비트를 제공합니다. 이 세트에는 대략 10^21 개의 숫자가 들어 있습니다. 즉, 충돌 가능성은 1 백만 명의 사용자가 발생한 후 10 억 분의 1 정도입니다.
이것은 암호화 awesomeness 생성을위한이 stackoverflow 대답의 약간의 수정입니다 : Secure random number generation in PHP.
언젠가'+1 char' 일 때 ('** 예측 가능 ** '을 의미)'name'의'md5'를 사용해야하는 이유는 무엇입니까? 왜 단지'md5 (마이크로 시간 (1))'또는'md5 (uniqid())'를하지 않습니까? – zerkms
@zerkms : 완벽하게 수용 가능한 옵션. 당신은 단지'md5 (rand()) '일 수도 있습니다. – Amber
또한 용량을 늘리려면 md5를 사용하지 않는 것이 좋지만 0-9a-zA-Z에서 무작위로 char을 생성하면됩니다.3262666762397899821056 개의 고유 조합과 md5에 대한 281474976710656 (** 1,100 만 배 ** 더 커졌습니다) – zerkms