>백엔드 개발 >PHP 문제 >PHP로 암호화 의사 난수 생성기를 사용하는 방법

PHP로 암호화 의사 난수 생성기를 사용하는 방법

醉折花枝作酒筹
醉折花枝作酒筹앞으로
2021-05-27 17:46:211918검색

이 글에서는 PHP에서 암호화된 의사 난수 생성기를 사용하는 방법을 소개합니다. 도움이 필요한 친구들이 모두 참고할 수 있기를 바랍니다.

PHP로 암호화 의사 난수 생성기를 사용하는 방법

오늘은 PHP의 암호화된 의사 난수 생성기(CSPRNG 확장)를 소개하겠습니다. 난수 생성은 실제로 매우 간단합니다. rand() 또는 mt_rand() 함수를 사용하면 됩니다. 하지만 오늘 우리가 이야기할 것은 더 복잡한 알고리즘을 사용하는 난수 생성기 세트입니다. rand()는 더 이상 권장되지 않습니다. mt_rand()는 더 빠르게 생성되며 이제 주류 기능입니다. 암호화된 의사 난수 생성 기능은 암호화적으로 안전하며 mt_rand()보다 약간 느립니다. 나중에 설명할 운영 체제의 일부 기능에 의존해야 합니다.

이 암호화 확장은 PHP7에 통합되어 있으므로 특별한 설치가 필요하지 않습니다. PHP7 이하 버전인 경우 확장을 독립적으로 설치해야 합니다. 테스트 시 아래에 설명된 기능을 찾을 수 없다면 현재 PHP 버전을 확인하세요.

의사 무작위 문자 생성

var_dump(bin2hex(random_bytes(5)));
// string(10) "f28dc2bdd5"
var_dump(random_bytes(5));
// string(5) "�"��"

random_bytes() 각 호출은 서로 다른 내용의 이진 문자열을 생성하며 매개변수는 이진 바이트 길이입니다. 직접 얻은 바이너리 데이터는 잘못된 형식이므로 일반적으로 bin2hex()를 사용하여 바이너리를 이해할 수 있는 16진수 형식 문자열로 변환해야 합니다. 그러나 결과적으로 변환 후 16진수 문자 길이는 설정한 문자 길이의 두 배가 됩니다. 이 기능의 기능은 안전한 사용자 비밀번호 솔트, 핵심 키워드 또는 초기화 벡터를 생성할 수 있습니다.

random_bytes()는 호출될 때마다 다른 내용의 문자열을 생성하며 매개변수는 문자 길이의 임의 문자입니다. 여기서는 5를 전달하고 10자를 반환합니다. 이 매개변수는 문자 수임을 알 수 있습니다. , 반환되는 것은 실제로 한 문자가 2바이트를 차지하는 반환 형식에 해당하는 바이트 수입니다. 아니면 매개변수의 두 배를 반환한다는 점만 기억하면 됩니다. 이 기능의 역할은 안전한 사용자 비밀번호 솔트, 핵심 키워드 또는 초기화 벡터를 생성할 수 있습니다.

의사 난수 생성

var_dump(random_int(100, 999));
var_dump(random_int(-1000, 0));
// int(900)
// int(-791)

정수 생성의 경우 더 간단합니다. 난수 범위인 Random_int() 함수에 두 개의 매개변수만 제공하면 됩니다. 실제로는 mt_rand()와 동일하게 사용됩니다.

생성 소스

위의 두 가지 암호화 의사 난수 함수의 생성 소스는 다음과 같이 운영 체제에 따라 다릅니다.

  • Windows 시스템에서는 CryptGenRandom() 함수가 사용됩니다. CNG-API는 7.2.0부터 사용됩니다

  • 리눅스 시스템에서는 Linux getrandom(2) 시스템 호출이 사용됩니다

  • 다른 시스템에서는 /dev/urandom이 사용됩니다

  • 그렇지 않으면 예외가 발생합니다

Exceptions

이 두 함수에도 발생하는 예외가 있습니다. 예를 들어 위에서 생성 소스를 찾을 수 없으면 예외가 발생합니다. 예외가 발생하는 다른 요인이 될 수도 있습니다.

  • 적절한 무작위 소스가 발견되지 않으면 예외가 발생합니다

  • 주어진 인수가 유효하지 않으면 TypeError가 발생합니다.

  • 주어진 바이트 길이가 유효하지 않으면 오류가 발생합니다

요약

오늘의 내용은 매우 간단하고, Random_bytes() 함수의 유용성을 발견했습니다. 앞으로는 우리 사이의 비밀번호 솔팅에 관한 기사처럼 직접 무작위로 솔트를 생성하는 함수를 작성할 필요가 없습니다. "소금" 비밀번호? 사용자 비밀번호를 안전하게 "소금"하는 방법은 무엇입니까? 랜덤 문자 생성 기능(generateSalt)은 기본적으로 이것으로 대체 가능합니다. 많은 것을 얻었다고 느껴지지 않나요? 학습의 속도는 멈추지 않습니다. 계속해서 더 흥미로운 콘텐츠를 함께 살펴보세요! !

테스트 코드:

https://github.com/zhangyue0503/dev-blog/blob/master/php/202007/source/PHP%E7%9A%84%E5%8A%A0%E5%AF%86%E4%BC%AA%E9%9A%8F%E6%9C%BA%E6%95%B0%E7%94%9F%E6%88%90%E5%99%A8%E7%9A%84%E4%BD%BF%E7%94%A8.php

추천 학습: php 비디오 튜토리얼

위 내용은 PHP로 암호화 의사 난수 생성기를 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 segmentfault.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제