최신 웹 개발 튜토리얼
 

PHP crypt() Function


<PHP 문자열 참조

정의 및 사용

crypt() 함수는 DES, 복어, 또는 MD5 알고리즘을 사용하여 해시 문자열을 반환합니다.

이 기능은 서로 다른 운영 체제에 다른 동작합니다. PHP 알고리즘을 사용할 수 있으며 설치할 때 어떤 알고리즘을 사용하는 것을 확인합니다.

소금 매개 변수는 선택 사항입니다. 그러나 crypt() 염없이 약한 암호를 생성한다. 더 나은 보안을 위해 충분히 강한 소금을 지정해야합니다.

와 함께 사용되는 일부 상수가 있습니다 crypt() 함수는. 가 설치 될 때 이러한 상수의 값은 PHP에 의해 설정됩니다.

상수 :

  • [CRYPT_STD_DES] - 표준 알파벳 문자 두 염 해시 기반 DES "./0-9A-Za-z" . 소금에 잘못된 문자를 사용하면이 기능이 실패합니다.
  • [CRYPT_EXT_DES] - 반복 카운트의 4 바이트 및 4 바이트의 염 다음 밑줄 이루어진 아홉 개 문자 염 DES 기반 해쉬 확장. 이러한 제 가능한 문자, 문자 당 6 비트, 최하위 문자로 인코딩된다. 0 ~ 63의 값은 다음과 같이 인코딩된다 "./0-9A-Za-z" . 소금에 잘못된 문자를 사용하면 함수가 실패합니다.
  • [CRYPT_MD5] - MD5는 12 문자 salt를 $ 1 $로 시작하는 해싱
  • [CRYPT_BLOWFISH] - 염, $ 2A 호 $로 $ 배 $ 또는 $ 2Y $, 두 자리 선정 된 파라미터 시작하는 복어 해싱 "$" 알파벳에서 22 개 문자 "./0-9A-Za-z" . 알파벳 이외의 문자를 사용하면이 기능이 길이가 0 인 문자열을 반환하게됩니다. "$" 매개 변수는 기본 복어 - 강타 해싱 algorithmeter의 반복 횟수의 기본 2 인 로그이며, 범위 04-31에 있어야합니다. 이 범위를 벗어나는 값은 함수가 실패합니다.
  • [CRYPT_SHA_256] - 16 문자 염 $ 5 $로 시작하는 SHA-256 해시. 소금 문자열로 시작하면 "rounds=<N>$" , N의 숫자 값이 훨씬 복어에 대한 비용 매개 변수와 같은 해시 루프가 실행되는 횟수를 나타내는 데 사용됩니다. 라운드의 기본 번호는 5000, 1000의 최소 999,999,999 최대가있다. 이 범위를 벗어나는 N의 선택은 가장 가까운 한계에 잘립니다.
  • [CRYPT_SHA_512] - 16 문자 염 $ 6 $로 시작하는 SHA-512 해시. 소금 문자열로 시작하면 "rounds=<N>$" , N의 숫자 값이 훨씬 복어에 대한 비용 매개 변수와 같은 해시 루프가 실행되는 횟수를 나타내는 데 사용됩니다. 라운드의 기본 번호는 5000, 1000의 최소 999,999,999 최대가있다. 이 범위를 벗어나는 N의 선택은 가장 가까운 한계에 잘립니다.

이 기능은 여러 알고리즘을 지원하는 시스템에서, 상기 상수로 설정되고 "1" 지원되는 경우 "0" 그렇지.

Note: 더 해독 기능이 없습니다. crypt() 함수는 단방향 알고리즘을 사용한다.


통사론

crypt( str,salt )

매개 변수 기술
str 필요합니다. 해시되는 문자열 지정
salt 선택 과목. 소금 문자열은 해싱을에 기초합니다

기술적 세부 사항

반환 값 : 인코딩 된 문자열이나보다 짧은 13 자이고, 실패에 소금과 다를 보장하는 캐릭터 라인을 돌려줍니다
PHP 버전 : 4+
변경 내역 : $ 2 배 $ 및 $ 2Y $ 복어 모드는 잠재력이 높은 비트의 공격에 대처하기 위해 PHP 5.3.7에서 추가되었다.

상수 SHA-256 및 SHA-512 5.3.2 PHP 첨가 하였다.

PHP 5.3.2로, 무효 라운드에 복어 동작은 반환 "failure" 문자열 ("*0" or "*1") 대신 DES로 다시 떨어지는.

PHP 5.3.0, PHP는 DES 확장 MD5 토굴, 표준 DES 및 복어 알고리즘의 구현을 포함하고 시스템이 알고리즘 중 하나 이상에 대한 지원이 부족하면 것을 사용합니다.

예 1

이 예에서 우리는 서로 다른 알고리즘을 테스트합니다 :

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

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

// 12 character salt starting with $1$
if (CRYPT_MD5 == 1)
{
echo "MD5: ".crypt('something','$1$somethin$')."\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('something','$2a$09$anexamplestringforsalt$')."\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('something','$5$rounds=5000$anexamplestringforsalt$')."\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('something','$6$rounds=5000$anexamplestringforsalt$');
}
else
{
echo "SHA-512 not supported.";
}
?>

코드의 출력은 상기 수 있었다 (depending on the operating system) :

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 문자열 참조