2012-04-21 2 views
6

해싱 할 때 crypt() 알고리즘이 어떤 알고리즘을 사용하는지 잘 모르겠습니다. 나는 PHP 매뉴얼을 보았지만 사용할 수있는 것이 무엇이든 사용한다고 말한다. 그러나 어떤 것을 사용하는지 어떻게 알 수 있습니까? 하나를 사용한다면 사용 방법을 알려주는 방법은 무엇입니까? 나는 현재 나의 개발 환경으로서 MAMP를 사용하고 있지만, PHP에서 성명서를 찾을 수있는 방법이 있어야한다고 생각한다.컴퓨터에서 crypt() 알고리즘을 사용하는 방법을 찾는 방법은 무엇입니까?

+0

어떤 소금 형식을 사용하고 있습니까? – CodesInChaos

+0

소금을 제공하면 그것이 무엇을 요구하고 있습니다. – Andy

+1

제가 올바르게 기억하고 있다면 소금의 형식에 따라 알고리즘 체크가 결정됩니다. http://php.net/manual/en/function.crypt.php – CodesInChaos

답변

9

알고리즘을 소금 문자열의 일부로 지정합니다. 예를 들어 $2a$으로 시작하면 Blowfish 사이퍼가 생깁니다. 사용하려는 알고리즘을 지원하지 않으면 의미있는 결과를 얻을 수 없습니다. CRYPT_BLOWFISH과 같은 사전 정의 된 상수 중 일부를 검사하여 어떤 알고리즘이 지원되는지 미리 알아 내려고 할 수 있습니다. 단, 적어도 PHP 5.2에서는 CRYPT_SHA256CRYPT_SHA512 상수가 항상 정의되지는 않습니다. PHP 5.3부터는 PHP가 자체적으로 알고리즘을 구현했기 때문에 PHP 5.2 이전 버전과 마찬가지로 PHP 컴파일시 시스템에서 사용할 수있는 것은 중요하지 않습니다. PHP 5.2를위한 Suhosin 패치는 Blowfish를 적어도 추가했지만 PHP 5.3에서 사용 된 것과 호환되지 않는 것으로 보입니다. - 두 문자 salt 알파벳에서 "와 표준 DES 기반의 해시

  • CRYPT_STD_DES을 :

    PHP docs for the crypt() function가 사용할 알고리즘을 지정 소금 문자열을 사용하는 방법에 대한 몇 가지 정보를 제공 할./0-9A-Za-z "라고합니다. 소금에 유효하지 않은 문자를 사용하면 crypt()가 실패합니다.

  • CRYPT_EXT_DES - 확장 DES 기반 해시입니다. "salt"는 밑줄로 구성된 의 9 바이트 문자열로 4 바이트의 반복 횟수와 4 바이트의 소금이 이어집니다. 이들은 인쇄 가능한 문자로 인코딩 된 입니다. 문자 당 6 비트, 최소 유효 문자가 먼저 나와야합니다. 0에서 63까지의 값은 "./0-9A-Za-z"로 인코딩됩니다. 소금에 유효하지 않은 문자를 사용하면 crypt() 이 실패합니다. 열두 문자 $ 1 $
  • CRYPT_BLOWFISH로 시작 염 로 해싱 MD5 - -
  • CRYPT_MD5 로서의 소금 복어 해시는 다음과 같다 : "$ 2A 호 $", 두 자리 선정 된 파라미터, "$", 22 자리 알파벳 "./0-9A-Za-z". 에서이 범위 밖의 문자를 사용하면 crypt()가 길이가 0 인 문자열을 반환합니다. 두 개의 자릿수 비용 매개 변수는 기본 Blowfish 기반 해싱 알고리즘에 대한 반복 수 의 기본 2 로그이며 범위 04-31에 있어야합니다.이 범위를 벗어나는 값은 crypt()를 실패하게 만듭니다.
  • CRYPT_SHA256 - 접두어가 이고 $ 5 $ 인 16 자로 된 SHA-256 해시입니다. salt 문자열이 'rounds = $'로 시작하면 값 N은 해시 루프가 일 수있는 횟수를 나타내는 데 사용됩니다. 이는 Blowfish의 비용 매개 변수와 매우 비슷합니다. 라운드 수는 5000이며, 최소값은 1000이고 최대 값은 99999999입니다. 이 범위를 벗어나는 N을 선택하면 이 가장 가까운 한계로 잘립니다.
  • CRYPT_SHA512 - $ 6 $가 접두사 인 문자 소금이 16 개인 SHA-512 해시. 소금 문자열이 'rounds = $'로 시작하면 N의 숫자 값은 Blowfish의 매개 변수와 같이 해시 루프를 수행해야하는 횟수를 나타내는 데 사용됩니다 ( ).기본 라운드 수는 5000이고 최소값은 이고 최대 값은 999,999,999입니다. 이 범위를 벗어나는 N 의 선택은 가장 가까운 한계로 잘립니다. 그래서

XA86로 시작하는 문자열이 소금입니다 당신이

crypt('password', '$2a$10$XA86t7EJ0xD9OYEUbnTulT'); 

을 사용할 수 있습니다, 당신은 2^10의 반복으로 복어를 사용하여 해시 문자열 "암호"를 지정할 수 있습니다.

마지막으로 더 많은 예제가 필요하거나이 암호 호환성 비즈니스를 처리하기 위해 뭔가를 원한다면 phpass을 살펴보십시오. 그것은 공개 도메인이며 내 경험에 멋지게 작동합니다. 여러 시스템과 호환되는 해시를 원한다고 지정하지 않는 한 자동으로 시스템에서 "최적의"알고리즘을 사용합니다 (MD5를 사용하는 경우).

+0

네, 저도 제 문제였습니다. 어떤 이상한 이유 때문에 정보가 충분하지 않습니다. – Andy

+0

예를 들어 $ 2a $를 사용할 때 crypt가 어떤 알고리즘을 사용할 지 알려주는 방법을 보여줄 수 있습니까? – Andy

+0

예, 잠시 후에 수정하겠습니다. 나는 상점에서 체크 아웃하기 위해 줄을 서있는 동안 내 전화를 입력했기 때문에 전에 더 많은 정보를 줄 수는 없었다. – Andrew

관련 문제