programing

랜덤 해시/문자열을 만드는 가장 좋은 방법은 무엇입니까?

cafebook 2023. 7. 27. 22:18
반응형

랜덤 해시/문자열을 만드는 가장 좋은 방법은 무엇입니까?

세션을 저장할 목적으로 해시를 생성하는 가장 좋은 방법은 무엇입니까?가볍고 휴대하기 쉬운 솔루션을 찾고 있습니다.

bin2hex(mcrypt_create_iv(22, MCRYPT_DEV_URANDOM));
  1. mcrypt_create_iv는 임의의 바이트 시퀀스를 제공합니다.
  2. bin2hex는 이를 ASCII 텍스트로 변환합니다.

출력 예:

d2c63a605ae27c13e43e26fe2c97a36c4556846dd3ef

"최고"는 상대적인 용어라는 것을 명심하세요.보안, 고유성 및 속도를 절충해야 합니다.위의 예제는 99%의 경우에 유용하지만, 특히 중요한 데이터를 다루는 경우에는 MCRYPT_DEV_URANDOM과 MCRYPT_DEV_RANDOM의 차이에 대해 읽어보는 것이 좋습니다.

마지막으로, "다양한 강도의 무작위 숫자와 문자열을 생성하기 위한" RandomLib가 있습니다.

지금까지 저는 당신이 값에서 해시를 도출하는 것과 동일하지 않은 임의의 문자열을 생성하려고 한다고 가정했습니다.후자의 경우 password_hash를 참조하십시오.

random_bytes() PHP 7.0에서 사용할 수 있습니다(또는 5.2 ~ 5.6의 경우폴리필 사용).암호화된 보안 기능입니다(에 비해).rand()는 아님)과 함께 사용할 수 있습니다.bin2hex(),base64_encode()또는 이진을 사용 사례에 안전한 문자열로 변환하는 다른 함수입니다.

16진수 문자열로 사용

bin2hex() 랜덤 바이트 수의 두 배에 달하는 16진수 문자열이 생성됩니다(각 16진수 문자는 4비트를 나타내는 반면 바이트에는 8비트가 있습니다).다음 문자만 포함됩니다.abcdef0123456789길이는 항상 2씩 증가합니다(정규식:/^([a-f0-9]{2})*$/).

$random_hex = bin2hex(random_bytes(18));
echo serialize($random_hex);

s:36:"ee438d1d108bd818aa0d525602340e5d7036";

Base64 문자열로 사용

base64_encode() 랜덤 바이트 수보다 33% 긴 문자열이 생성됩니다(각 base64 문자는 6비트를 나타내는 반면 바이트에는 8비트가 있습니다).길이는 항상 4씩 증가합니다.=데이터를 인코딩하는 데 사용되는 다음 목록에서 문자열의 끝과 문자를 패딩하는 데 사용됩니다(가독성을 위해 추가한 공백 제외).

abcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZ
0123456789
/+

사용 가능한 공간을 최대한 활용하려면 3에서 3까지 증가하는 것이 가장 좋습니다.random_bytes()은 결문열일치니다합이자와 합니다./^([a-zA-Z\/+=]{4})*$/,비록 ~일지라도=마지막에만 다음과 같이 나타날 수 있습니다.=또는==그리고 3의 증가가 아닌 숫자가 제공될 때만.random_bytes().

$random_base64 = base64_encode(random_bytes(18));
echo serialize($random_base64);

s:24:"ttYDDiGPV5K0MXbcfeqAGniH";

PHP의 내장 해싱 기능을 사용할 수 있으며,둘 다가 아니라 하나만 선택하세요.

다 두가를모사면용하두지,▁that▁both▁using면,,sha1(md5($pass))를 모두 가 별로 없습니다.둘 다 사용해도 암호가 더 안전하지 않고 중복 데이터가 발생하며 의미가 없습니다.

PHP 보안 컨소시엄을 살펴보십시오. 비밀번호 해싱은 약점이 있는 좋은 기사를 제공하고 해싱으로 보안을 개선합니다.

Nonce는 "한 번 사용한 숫자"를 나타냅니다.무단 액세스를 방지하기 위한 요청에 사용되며, 비밀 를 보내고 코드가 사용될 때마다 키를 확인합니다.

FullThrottle Development에서 PHP NONCE 라이브러리를 더 확인할 수 있습니다.

아마도 당신에게 필요한 것은 유니크()인가요?

uniqid : 고유 ID 생성

php 5.3.0 이후 openssl_random_pseudo_bytes를 사용하여 유사 랜덤 바이트 문자열을 생성할 수 있습니다.이 함수를 사용하고 다음 방법 중 하나를 사용하여 문자열로 변환할 수 있습니다.

$bytes = openssl_random_pseudo_bytes(32);
$hash = base64_encode($bytes);

또는

$bytes = openssl_random_pseudo_bytes(32);
$hash = bin2hex($bytes);

첫 번째 문자열은 숫자, 소문자, 대문자 및 일부 특수 문자(=, +, /)로 구성된 가장 짧은 문자열을 생성합니다.두 번째 대안은 16진수 숫자(0-9, a-f)를 생성합니다.

사용하다random_bytes()가능하다면요!

$length = 32;

if (function_exists("random_bytes")) {
    $bytes = random_bytes(ceil($length / 2));
    $token = substr(bin2hex($bytes), 0, $length)
}

php.net 에서 확인하세요.

저는 개인적으로 Apache의 mod_unique_id를 사용하여 세션을 저장할 임의의 고유 번호를 생성합니다.(아파치를 사용하는 경우) 정말 사용하기 쉽습니다.

일단 여기 http://en.wikipedia.org/wiki/Cryptographic_nonce 을 보세요. 심지어 PHP 라이브러리에 대한 링크도 있습니다.

저는 일반적으로 세션 ID를 수동으로 관리하지 않습니다.저는 이전에 이러한 방법으로 혼합을 권장하는 것을 본 적이 있지만, 직접 사용한 적이 없기 때문에 기본값보다 더 낫거나 더 나쁘다는 것을 증명할 수 없습니다(참고: 이것은 수동 관리가 아닌 오토젠과 함께 사용하는 것입니다).

//md5 "emulation" using sha1
ini_set('session.hash_function', 1);
ini_set('session.hash_bits_per_character', 5);

사람마다다것입다니를▁different다니▁have.best하지만 내 방식은 이렇습니다

  1. 다드내 rand-hash.php파일: http://bit.ly/random-string-generator
  2. include()당신이 작업하고 있는 php 스크립트에서.그럼, 간단히 전화하세요.cc_rand()으로 6자 합니다. 여기에는 "" " " " " " " " " " " 이 포함될 수 .a-z, A-Z,그리고.0-9합격할 수 있습니다length문자 수를 지정하려면cc_rand()돌아와야 합니다.

예:

  1. cc_rand()다음과 같은 것을 반환합니다.4M8iro

  2. cc_rand(15)다음과 유사한 내용을 반환합니다.S4cDK0L34hRIqAS

건배!

언급URL : https://stackoverflow.com/questions/2293684/what-is-the-best-way-to-create-a-random-hash-string

반응형