백엔드 개발 PHP 튜토리얼 [PHP]利用openssl_random_pseudo_bytes跟base64_encode函数来生成随机字符串

[PHP]利用openssl_random_pseudo_bytes跟base64_encode函数来生成随机字符串

Jun 13, 2016 pm 12:17 PM
bytes length openssl random

[PHP]利用openssl_random_pseudo_bytes和base64_encode函数来生成随机字符串

openssl_random_pseudo_bytes函数本身是用来生成指定个数的随机字节,因此在使用它来生成随机字符串时,还需要配合使用函数base64_encode。如下所示:

<code class="language-php hljs "><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getRandomString</span><span class="hljs-params">(<span class="hljs-variable">$length</span> = <span class="hljs-number">42</span>)</span>    {</span>        <span class="hljs-comment">/*         * Use OpenSSL (if available)         */</span>        <span class="hljs-keyword">if</span> (function_exists(<span class="hljs-string">'openssl_random_pseudo_bytes'</span>)) {            <span class="hljs-variable">$bytes</span> = openssl_random_pseudo_bytes(<span class="hljs-variable">$length</span> * <span class="hljs-number">2</span>);            <span class="hljs-keyword">if</span> (<span class="hljs-variable">$bytes</span> === <span class="hljs-keyword">false</span>)                <span class="hljs-keyword">throw</span> <span class="hljs-keyword">new</span> RuntimeException(<span class="hljs-string">'Unable to generate a random string'</span>);            <span class="hljs-keyword">return</span> substr(str_replace([<span class="hljs-string">'/'</span>, <span class="hljs-string">'+'</span>, <span class="hljs-string">'='</span>], <span class="hljs-string">''</span>, base64_encode(<span class="hljs-variable">$bytes</span>)), <span class="hljs-number">0</span>, <span class="hljs-variable">$length</span>);        }        <span class="hljs-variable">$pool</span> = <span class="hljs-string">'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'</span>;        <span class="hljs-keyword">return</span> substr(str_shuffle(str_repeat(<span class="hljs-variable">$pool</span>, <span class="hljs-number">5</span>)), <span class="hljs-number">0</span>, <span class="hljs-variable">$length</span>);    }</code>
로그인 후 복사

在调用base64_encode函数之后,还对结果进行了一次替换操作,目的是要去除随机生成的字符串中不需要的字符。

当然,在使用openssl_random_pseudo_bytes函数之前,最好使用function_exists来确保该函数在运行时是可用的。如果不可用,则使用Plan B:

<code class="language-php hljs ">substr(str_shuffle(str_repeat(<span class="hljs-variable">$pool</span>, <span class="hljs-number">5</span>)), <span class="hljs-number">0</span>, <span class="hljs-variable">$length</span>);</code>
로그인 후 복사

这个函数的通用性很强,可以根据业务的需要进行适当修改然后当作静态方法进行调用。

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Nginx가 보다 안전한 통신을 위해 OpenSSL 라이브러리를 사용하는 방법 Nginx가 보다 안전한 통신을 위해 OpenSSL 라이브러리를 사용하는 방법 Jun 10, 2023 pm 01:51 PM

Nginx는 웹 서버, 로드 밸런서, 역방향 프록시 및 캐시에 널리 사용되는 소프트웨어입니다. 네트워크 전송 중 데이터 암호화 및 보안에 대한 관심이 높아지고 있습니다. 통신 보안을 향상시키기 위해 OpenSSL 라이브러리를 사용하여 SSL/TLS 프로토콜을 구현하여 민감한 데이터의 전송을 보호할 수 있습니다. 이 기사에서는 Nginx와 OpenSSL 라이브러리를 사용하여 보다 안전한 통신을 달성하는 방법을 설명합니다. OpenSSL 라이브러리 설치 및 구성 먼저 서버에 OpenSSL 라이브러리를 설치해야 합니다. 만들 수 있다

HWID V 2.2 수동 활성화 방법 및 튜토리얼 HWID V 2.2 수동 활성화 방법 및 튜토리얼 Oct 20, 2023 pm 07:17 PM

수동 활성화를 원하는 사용자를 위한 것입니다. 이 작업을 수행하는 데 필요한 도구에 대한 도움이 필요하면 여기를 확인하세요. 수동 활성화 프로세스는 두 부분으로 나눌 수 있습니다. 1- 준비된 배치 파일에서 인터넷이 활성화되어 있는지 확인하십시오. 관리자 권한으로 Windows Powershell을 열고 다음을 입력하여 제공된 순서대로 명령을 나열하십시오. 키를 입력하세요(위 목록의 키로 교체). 다음 명령을 사용하세요. &lt;key&gt;slmgr/ipk&lt;key&gt; 여기에서 범용 티켓을 다운로드하고 다운로드한 파일을 추출하세요. 이제 Powershell(Get-ItemProper)에 다음 코드를 입력합니다.

OpenSSL을 사용하여 MySQL SSL 인증서를 생성하는 방법 OpenSSL을 사용하여 MySQL SSL 인증서를 생성하는 방법 Sep 09, 2023 pm 02:12 PM

OpenSSL을 사용하여 MySQL SSL 인증서를 생성하는 방법 소개: MySQL은 널리 사용되는 관계형 데이터베이스 시스템으로 실제 프로덕션 환경에서 암호화된 통신을 위해 SSL(SecureSocketsLayer) 프로토콜을 사용하는 것이 매우 중요합니다. 이 기사에서는 OpenSSL 도구를 사용하여 MySQL SSL 인증서를 생성하는 방법을 소개하고 해당 코드 예제를 제공합니다. 단계: OpenSSL 설치: 먼저 컴퓨터에 OpenSSL이 설치되어 있는지 확인하세요.

CentOS 7 및 CentOS 7에서 OpenBLAS 설치 OpenSSL 설치 CentOS 7 및 CentOS 7에서 OpenBLAS 설치 OpenSSL 설치 Feb 10, 2024 am 11:45 AM

오픈소스 운영체제인 LINUX는 다양한 애플리케이션과 사용자 그룹을 보유하고 있습니다. CentOS7은 RHEL(Red Hat Enterprise Linux) 소스 코드를 기반으로 구축되었으며 높은 수준의 안정성과 보안성을 갖추고 있습니다. OpenBLAS 및 OpenSSL은 많은 개발자와 시스템 관리자의 일반적인 요구 사항입니다. 이 문서에서는 CentOS7에서 OpenBLAS 및 OpenSSL을 설치하고 구성하는 방법을 자세히 설명합니다. OpenBLAS는 BLAS(BasicLinearAlgebraSubprograms) 인터페이스를 기반으로 하는 오픈 소스 고성능 수학 라이브러리입니다.

Jul 25, 2023 am 09:09 AM

문자열의 길이를 얻으려면 Java의 String.length() 함수를 사용하십시오. Java 프로그래밍에서 문자열은 문자열의 길이, 즉 문자열의 문자 수를 가져와야 하는 경우가 많습니다. Java에서는 String 클래스의 length() 함수를 사용하여 문자열의 길이를 얻을 수 있습니다. 다음은 간단한 예제 코드입니다: publicclassStringLengthExample{publ

Python 랜덤 라이브러리 데모를 사용하는 방법 Python 랜덤 라이브러리 데모를 사용하는 방법 May 05, 2023 pm 08:13 PM

pythonrandom 라이브러리 데모의 간단한 사용 난수를 생성하거나 시퀀스에서 요소를 무작위로 선택해야 할 때 Python에 내장된 무작위 라이브러리를 사용할 수 있습니다. 다음은 무작위 라이브러리를 사용하는 방법을 보여주는 주석이 달린 예입니다. #Import random library importrandom #0과 1 사이의 무작위 십진수 생성 random_float=random.random()print(random_float)#지정된 범위 내에서 난수 십진수 생성 Random 정수(끝점 포함) random_int=random.randint(1,10)print(random_int)#

Jul 25, 2023 am 09:06 AM

Java는 Random 클래스의 nextDouble() 함수를 사용하여 임의의 배정밀도 부동 소수점 숫자를 생성합니다. Java의 Random 클래스는 다양한 유형의 난수를 생성하는 데 사용할 수 있는 의사 난수 생성기입니다. 그 중 nextDouble() 함수는 임의의 배정밀도 부동 소수점 수를 생성하는 데 사용됩니다. Random 클래스를 사용하기 전에 먼저 java.util 패키지를 가져와야 합니다. 다음으로 Random 객체를 생성하고 nextDouble() 함수를 사용할 수 있습니다.

golang에서 '정의되지 않음: bytes.Split' 오류를 해결하는 방법은 무엇입니까? golang에서 '정의되지 않음: bytes.Split' 오류를 해결하는 방법은 무엇입니까? Jun 25, 2023 pm 02:02 PM

Go 언어에서 bytes 패키지는 바이트 유형을 조작하기 위한 패키지이며 Split() 메서드와 같은 유용한 메서드를 많이 포함합니다. 그러나 Split() 메서드를 사용하는 경우 "정의되지 않음: bytes.Split" 오류가 발생할 수 있습니다. 이 오류는 일반적으로 Go 버전이 호환되지 않거나 필요한 종속 라이브러리가 부족하여 발생합니다. 이 기사에서는 이 오류를 해결하는 몇 가지 방법을 소개합니다. 방법 1: 다음과 같이 Go 버전을 업그레이드합니다.

See all articles