>  기사  >  백엔드 개발  >  php는 DES, Blowfish 및 MD5 알고리즘 함수 crypt()를 사용하여 암호화된 문자열을 반환합니다.

php는 DES, Blowfish 및 MD5 알고리즘 함수 crypt()를 사용하여 암호화된 문자열을 반환합니다.

黄舟
黄舟원래의
2017-11-02 10:29:192026검색

정의 및 사용법

crypt() 함수는 DES, Blowfish 또는 MD5 알고리즘을 사용하여 암호화된 문자열을 반환합니다.

이 함수는 운영 체제에 따라 다르게 작동하며 일부 운영 체제에서는 둘 이상의 알고리즘 유형을 지원합니다. 설치 시 PHP는 어떤 알고리즘을 사용할 수 있는지, 어떤 알고리즘이 사용되는지 확인합니다.

정확한 알고리즘은 솔트 매개변수의 형식과 길이에 따라 다릅니다. 솔트는 특정 암호화 방법을 사용하여 특정 문자열에서 생성되는 문자열 수를 늘려 암호화를 더욱 안전하게 만들 수 있습니다.

다음은 crypt() 함수에 사용되는 상수입니다. 이러한 상수 값은 설치 중에 PHP에 의해 설정됩니다.

상수:

  • [CRYPT_SALT_LENGTH] - 기본 암호화 길이. 길이가 2

  • 인 표준 DES 암호화를 사용합니다.[CRYPT_STD_DES] - 알파벳 "./0-9A-Za-z"의 2자리 솔트를 사용하는 표준 DES 기반 암호화입니다. 솔트에 유효하지 않은 문자를 사용하면 함수가 실패하게 됩니다.

  • [CRYPT_EXT_DES] - 밑줄 1개와 그 뒤에 4바이트 반복 번호 및 4바이트 솔트로 구성된 9자리 솔트를 사용하는 확장 DES 기반 암호화입니다. 이는 인쇄 가능한 문자(각각 6비트)로 최하위 문자부터 인코딩됩니다. 0~63의 값은 "./0-9A-Za-z"로 인코딩됩니다. 솔트에 유효하지 않은 문자를 사용하면 함수가 실패하게 됩니다.

  • [CRYPT_MD5] - $1$로 시작하는 12자리 솔트를 사용한 MD5 암호화입니다.

  • [CRYPT_BLOWFISH] - Blowfish 암호화에는 $2a$, $2x$ 또는 $2y$로 시작하는 솔트, 두 자리 비용 매개변수 "$" 및 알파벳 "./0-9A- 22자)가 있습니다. Za-z에서." 알파벳 이외의 문자를 사용하면 함수는 길이가 0인 문자열을 반환합니다. "$" 인수는 Blowfish 기반 해싱 알고리즘의 반복 횟수에 대한 기본 2 로그이며 04-31 범위에 있어야 합니다. 이 범위를 벗어나는 값을 사용하면 기능이 실패하게 됩니다.

  • [CRYPT_SHA_256] - 16자 솔트를 사용한 SHA-256 암호화, 최저 $5$. 솔트 문자열이 "rounds=ecb5fc74e9cd1f249d43a2bdbf2f239d$"로 시작하는 경우 숫자 값 N은 Blowfish의 비용 매개변수와 유사하게 해싱 라운드가 실행되는 횟수를 나타내는 데 사용됩니다. 기본 루프 수는 5000이고, 최소값은 1000, 최대값은 999,999,999입니다. 이 범위를 벗어난 N 값은 가장 가까운 경계 값으로 변환됩니다.

  • [CRYPT_SHA_512] - 16자 솔트를 사용한 SHA-512 암호화, 최저 $6$. 솔트 문자열이 "rounds=ecb5fc74e9cd1f249d43a2bdbf2f239d$"로 시작하는 경우 숫자 값 N은 Blowfish의 비용 매개변수와 유사하게 해싱 라운드가 실행되는 횟수를 나타내는 데 사용됩니다. 기본 루프 수는 5000이고, 최소값은 1000, 최대값은 999,999,999입니다. 이 범위를 벗어난 N 값은 가장 가까운 경계 값으로 변환됩니다.

이 기능이 여러 알고리즘을 지원하는 시스템에서는 위의 상수가 지원되는 경우 "1"로 설정되고 지원되지 않는 경우 "0"으로 설정됩니다.

Note: 해당 복호화 기능이 없습니다. crypt() 함수는 단방향 알고리즘을 사용합니다.

Syntax

crypt(str,salt)

매개변수           설명

str                   필수입니다. 인코딩할 문자열을 지정합니다.

소금 선택사항. 인코딩을 더욱 안전하게 만들기 위해 인코딩되는 문자 수를 늘리는 데 사용되는 문자열입니다. 솔트 인수가 제공되지 않으면 함수가 호출될 때마다 무작위로 생성됩니다. ​​

기술 세부정보

반환값: ​ ​ ​ 암호화된 문자열을 반환하며, 실패할 경우 솔트와 다른 13자 미만의 문자열을 반환합니다.

PHP 버전: 4+

更新日志:         在 PHP 5.3.7 中,新增了 $2x$ 和 $2y$ Blowfish 模式,用来处理潜在的高位攻击。                          

                          在 PHP 5.3.2 中,新增了常量 SHA-256 和 SHA-512。

                          自 PHP 5.3.2 起,Blowfish 在无效的循环将返回 "failure" 字符串("*0" 或 "*1"),而不是后退到 DES。
                          自 PHP 5.3.0 起,PHP 自带 MD5 加密实现、标准 DES 实现、扩展 DES 实现以及 Blowfish 算法。如果系统不支持上述的算法,将使用 PHP 自带的算法实现。    

实例

实例 1

在本实例中,我们将测试不同的算法:

<?php
// 2 character salt
if (CRYPT_STD_DES == 1)
{
echo "Standard DES: ".crypt(&#39;something&#39;,&#39;st&#39;)."n<br>"; 
}
else
{
echo "Standard DES not supported.n<br>";
}

// 4 character salt
if (CRYPT_EXT_DES == 1)
{
echo "Extended DES: ".crypt(&#39;something&#39;,&#39;_S4..some&#39;)."n<br>";
}
else
{
echo "Extended DES not supported.n<br>";
}

// 12 character salt starting with $1$ 
if (CRYPT_MD5 == 1)
{
echo "MD5: ".crypt(&#39;something&#39;,&#39;$1$somethin$&#39;)."n<br>"; 
}
else
{
echo "MD5 not supported.n<br>";
}

// Salt starting with $2a$. The two digit cost parameter: 09. 22 characters 
if (CRYPT_BLOWFISH == 1)
{
echo "Blowfish: ".crypt(&#39;something&#39;,&#39;$2a$09$anexamplestringforsalt$&#39;)."n<br>"; 
}
else
{
echo "Blowfish DES not supported.n<br>";
}

// 16 character salt starting with $5$. The default number of rounds is 5000.
if (CRYPT_SHA256 == 1) 
{
echo "SHA-256: ".crypt(&#39;something&#39;,&#39;$5$rounds=5000$anexamplestringforsalt$&#39;)."n<br>"; }
else
{
echo "SHA-256 not supported.n<br>";
}

// 16 character salt starting with $5$. The default number of rounds is 5000.
if (CRYPT_SHA512 == 1) 
{
echo "SHA-512: ".crypt(&#39;something&#39;,&#39;$6$rounds=5000$anexamplestringforsalt$&#39;); 
}
else
{
echo "SHA-512 not supported.";
}
?>

上面的代码输出如下(取决于操作系统):

Standard DES: stqAdD7zlbByI
Extended DES: _S4..someQXidlBpTUu6
MD5: $1$somethin$4NZKrUlY6r7K7.rdEOZ0w.
Blowfish: $2a$09$anexamplestringforsaleLouKejcjRlExmf1671qw3Khl49R3dfu
SHA-256: $5$rounds=5000$anexamplestringf$KIrctqsxo2wrPg5Ag/hs4jTi4PmoNKQUGWFXlVy9vu9
SHA-512: $6$rounds=5000$anexamplestringf$Oo0skOAdUFXkQxJpwzO05wgRHG0dhuaPBaOU/
oNbGpCEKlf/7oVM5wn6AN0w2vwUgA0O24oLzGQpp1XKI6LLQ0.

一、代码

<?php 
 $str = &#39;应用crypt()函数进行单向加密!&#39;;     //声明字符串变量$str 
 echo &#39;加密前$str的值为:&#39;.$str; 
 $crypttostr = crypt($str);      //对变量$str加密 
 echo &#39;<p>加密后$str的值为:&#39;.$crypttostr;  //输出加密后的变量 
?>

二、运行结果

参数不带salt,每次加密得出的密文都不一样。
加密前$str的值为:应用crypt()函数进行单向加密!
加密后$str的值为:$1$Re4.Gg4.$D.yd00xX0fFfIfp6KrKGN0

위 내용은 php는 DES, Blowfish 및 MD5 알고리즘 함수 crypt()를 사용하여 암호화된 문자열을 반환합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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