[php] PHP 암호를위한 안전한 해시 및 솔트

현재 MD5는 부분적으로 안전하지 않다고합니다. 이것을 고려하여 암호 보호에 사용할 메커니즘을 알고 싶습니다.

이 질문 은 “이중 해싱”이 비밀번호를 한 번 해시하는 것보다 덜 안전합니까? 개별 파일에 대한 암호 보호를 구현
하는 방법 은 있지만 여러 번 해싱하는 것이 좋습니다 . 소금 사용을 제안합니다.

PHP를 사용하고 있습니다. 안전하고 빠른 비밀번호 암호화 시스템을 원합니다. 암호를 백만 번 해싱하는 것이 더 안전하지만 느려질 수 있습니다. 속도와 안전의 균형을 잘 유지하는 방법은 무엇입니까? 또한 결과가 일정한 수의 문자를 갖는 것을 선호합니다.

  1. 해싱 메커니즘은 PHP에서 사용할 수 있어야합니다
  2. 안전해야합니다
  3. 소금을 사용할 수 있습니다 (이 경우 모든 소금이 똑같이 좋습니까? 좋은 소금을 생성하는 방법이 있습니까?)

또한 데이터베이스에 두 개의 필드 (예 : MD5를 사용하는 필드와 SHA를 사용하는 필드)를 저장해야합니까? 더 안전하거나 안전하지 않습니까?

충분히 명확하지 않은 경우 안전하고 빠른 암호 보호 메커니즘을 사용하기 위해 사용할 해싱 기능과 좋은 소금을 선택하는 방법을 알고 싶습니다.

내 질문에 잘 맞지 않는 관련 질문 :

PHP에서 SHA와 MD5의 차이점
단순 암호 암호화
asp.net의 키, 암호를 안전하게 저장하는
방법 Tomcat 5.5에서 소금에 절인 암호를 어떻게 구현 하시겠습니까?



답변

면책 조항 :이 답변은 2008 년에 작성되었습니다.

그 이후로, PHP는 우리에게 주신 password_hash하고 password_verify자신의 도입 이후, 그들은 권장 암호 해싱 및 확인 방법, 그리고.

대답의 이론은 여전히 ​​잘 읽습니다.

TL; DR

하지마

  • 사용자가 비밀번호로 입력 할 수있는 문자를 제한하지 마십시오. 바보 만이 일을합니다.
  • 비밀번호 길이를 제한하지 마십시오. 사용자가 supercalifragilisticexpialidocious가 포함 된 문장을 원한다면 사용하지 마십시오.
  • 비밀번호에서 HTML 및 특수 문자를 제거하거나 이스케이프 처리하지 마십시오.
  • 사용자의 비밀번호를 일반 텍스트로 저장하지 마십시오.
  • 비밀번호를 분실 한 경우를 제외하고 사용자에게 비밀번호를 이메일로 보내지 말고 임시 비밀번호를 보냈습니다.
  • 절대 어떤 식 으로든 비밀번호를 기록하지 마십시오.
  • SHA1 또는 MD5 또는 심지어 SHA256으로 비밀번호를 해시하지 마십시오 ! 현대 크래커 는 각각 60-180 억 해시를 초과 할 수 있습니다 (각각).
  • bcrypt와 hash () 의 원시 출력을 혼합하지 마십시오 . 16 진수 출력 또는 base64_encode를 사용하십시오. (이는 불량을 일으킬 수있는 모든 입력에 적용되며 \0보안을 심각하게 약화시킬 수 있습니다.)

도스

  • 가능하면 scrypt를 사용하십시오. 당신이 할 수 없다면 bcrypt.
  • SHA2 해시와 함께 bcrypt 또는 scrypt를 사용할 수없는 경우 PBKDF2를 사용하십시오.
  • 데이터베이스가 손상되면 모든 사람의 비밀번호를 재설정하십시오.
  • 8 ~ 10 자 이상의 적절한 길이를 구현하고 대문자 1 자, 소문자 1 자, 숫자 및 기호가 필요합니다. 암호의 엔트로피가 향상되어 암호 해독이 어려워집니다. (일부 토론에 대해서는 “비밀번호를 만드는 방법은 무엇입니까?”섹션을 참조하십시오.)

어쨌든 암호를 해시해야하는 이유는 무엇입니까?

암호 해싱의 목표는 간단합니다. 데이터베이스를 손상시켜 사용자 계정에 악의적으로 액세스하는 것을 방지합니다. 따라서 암호 해싱의 목표는 일반 텍스트 암호를 계산하기 위해 너무 많은 시간이나 비용을 들여 해커 나 크래커를 막는 것입니다. 그리고 시간 / 비용은 당신의 무기고에서 최고의 억제력입니다.

사용자 계정에서 강력하고 강력한 해시를 원하는 또 다른 이유는 시스템의 모든 암호를 변경할 수있는 충분한 시간을 제공하기 위해서입니다. 데이터베이스가 손상 될 경우에에 당신은 충분한 시간이 필요합니다 이상 시스템 다운을 잠글 데이터베이스의 모든 암호를 변경하지 않을 경우.

Whitehat Security의 CTO 인 Jeremiah Grossman 은 최근 비밀번호 복구 후 비밀번호 보호를 무차별 적으로 차단해야하는 White Hat Security 블로그에 다음 과 같이 언급했습니다 .

흥미롭게도,이 악몽을 극복하면서 암호 해독, 저장 및 복잡성에 대해 몰랐던 많은 것을 배웠습니다. 비밀번호 저장이 비밀번호 복잡성보다 훨씬 중요한 이유에 대해 알게되었습니다. 암호가 어떻게 저장되는지 모르는 경우 복잡 할 수 있습니다. 이것은 암호 및 암호 전문가에게는 일반적인 지식 일 수 있지만 일반적인 InfoSec 또는 웹 보안 전문가에게는 의심의 여지가 있습니다.

(엠파 시스 광산)

어쨌든 좋은 암호 는 무엇입니까 ?

엔트로피 . (난 랜달의 관점에 전적으로 동의하지는 않는다.)

간단히 말해서, 엔트로피는 암호 내에 얼마나 많은 변화가 있는지입니다. 암호가 소문자 로마자이면 26 자입니다. 큰 차이는 없습니다. 영숫자 암호는 36 자로 더 좋습니다. 그러나 기호와 함께 대소 문자를 허용하는 것은 대략 96 자입니다. 그것은 편지보다 훨씬 낫습니다. 한 가지 문제는 암호를 기억하기 쉽게하기 위해 엔트로피를 줄이는 패턴을 삽입하는 것입니다. 죄송합니다!

암호 엔트로피는 쉽게 근사 됩니다. 전체 범위의 ASCII 문자 (대략 96 자 입력 가능 문자)를 사용하면 문자 당 6.6의 엔트로피가 생성되며 암호의 경우 8 자에서 미래 보안을 위해 여전히 너무 낮습니다 (52.679 비트의 엔트로피). 그러나 좋은 소식은 더 긴 암호와 유니 코드 문자가있는 암호는 실제로 암호의 엔트로피를 높이고 해독하기가 더 어렵다는 것입니다.

Crypto StackExchange 사이트 에서 암호 엔트로피에 대한 자세한 설명이 있습니다. 좋은 Google 검색은 많은 결과를 낳습니다.

코멘트에서 나는 지적 @popnoodles와 이야기를 시행 X 많은 문자, 숫자, 기호 등으로 X 길이의 암호 정책을 실제로 암호 방식은 예측하여 엔트로피를 감소시킬 수있다. 동의합니다. Randomess는 가능한 한 무작위로 항상 가장 안전하지만 가장 기억에 남는 솔루션입니다.

내가 알 수있는 한 세계 최고의 암호를 만드는 것은 Catch-22입니다. 기억하기 어렵고, 예측 가능하고, 짧고, 너무 많은 유니 코드 문자 (Windows / 모바일 장치에서 입력하기 어렵다), 너무 길다. 암호는 실제 용도에 충분하지 않으므로 암호를 보호해야합니다. 포트 녹스에있었습니다.

모범 사례

Bcrypt와 Scrypt 는 현재 모범 사례입니다. Scrypt 는 시간에 비해 bcrypt보다 낫지 만 Linux / Unix 또는 웹 서버에서 표준으로 채택하지 않았으며 아직 알고리즘에 대한 심층적 인 검토를하지 않았습니다. 그러나 여전히 알고리즘의 미래는 유망 해 보입니다. Ruby로 작업 하는 경우 도움 이되는 scrypt gem 이 있으며 Node.js에는 자체 scrypt 패키지가 있습니다. Scrypt 확장 또는 Libsodium 확장을 통해 PHP에서 Scrypt를 사용할 수 있습니다 (둘 다 PECL에서 사용 가능).

bcrypt를 사용하는 방법을 이해하거나 좋은 래퍼를 찾거나 더 레거시 구현을 위해 PHPASS 와 같은 것을 사용 하려면 crypt 함수에 대한 설명서를 읽는 것이 좋습니다 . 15 ~ 18이 아닌 경우 최소 12 라운드의 bcrypt를 권장합니다.

나는 bcrypt가 가변 비용 메커니즘으로 복어의 주요 일정 만 사용한다는 것을 알았을 때 bcrypt 사용에 대한 마음을 바꿨습니다. 후자는 복어의 이미 비싼 키 일정을 늘려 암호를 무차별 처리하는 비용을 증가시킵니다.

평균 관행

나는 더 이상이 상황을 거의 상상할 수 없다. PHPASS 는 PHP 3.0.18부터 5.3까지 지원하므로 상상할 수있는 거의 모든 설치에서 사용할 수 있으며 환경에서 bcrypt를 지원하는지 확실 하지 않은 경우 사용해야합니다 .

그러나 bcrypt 또는 PHPASS를 전혀 사용할 수 없다고 가정하십시오. 그럼 뭐야?

환경 / 응용 프로그램 / 사용자 인식이 허용 할 수있는 최대 라운드 수로 PDKBF2 를 구현해보십시오 . 내가 추천하는 가장 낮은 숫자는 2500 라운드입니다. 또한 조작을 재현하기 어렵게 만들 수있는 경우 hash_hmac () 를 사용해야 합니다.

미래의 관행

PHP 5.5는 완전한 암호 보호 라이브러리 로, bcrypt 작업시 발생하는 고통을 추상화합니다. @ircmaxell은 대부분의 일반적인 환경, 특히 공유 호스트에서 PHP 5.2 및 5.3을 사용하고 있지만 @ircmaxell은 PHP 5.3.7과 호환되는 향후 API에 대한 호환성 계층 을 구축했습니다 .

암호화 요약 및 면책

실제로 해시 된 암호를 해독 하는 데 필요한 계산 능력 이 없습니다. 컴퓨터가 암호를 “크래킹”하는 유일한 방법은 암호를 다시 작성하고 보안에 사용되는 해싱 알고리즘을 시뮬레이션하는 것입니다. 해시의 속도는 무차별 강제 기능과 선형으로 관련됩니다. 더 나쁜 것은 여전히 ​​대부분의 해시 알고리즘을 쉽게 병렬화하여 더 빠르게 수행 할 수 있다는 것입니다. 이것이 bcrypt 및 scrypt와 같은 비용이 많이 드는 구성표가 중요한 이유입니다.

당신이 당신의 사용자를 보호하기 위해 최선의 노력을해야합니다 있도록 가능한 모든 공격 위협이나 도로를 예견 할 수없고 앞까지를 . 당신이 경우에, 당신도 너무 늦기 때까지 공격 한 사실을 그리워 … 수 당신에게있는 거 책임을지지하고 . 그러한 상황을 피하려면 먼저 편집증을 행동하십시오. 자신의 소프트웨어를 내부적으로 공격하고 사용자 자격 증명을 도용하거나 다른 사용자의 계정을 수정하거나 데이터에 액세스하십시오. 시스템의 보안을 테스트하지 않으면 자신 외에 다른 사람을 비난 할 수 없습니다.

마지막으로 : 나는 암호 전문가가 아닙니다. 내가 말한 것은 내 의견이지만, 그것이 좋은 상식과 많은 독서에 근거한다고 생각합니다. 가능한 한 편집증을 가지고 가능한 한 침입을 어렵게하고, 그래도 걱정이된다면 화이트 햇 해커 나 암호 전문가에게 연락하여 코드 / 시스템에 대한 의견을 확인하십시오.


답변

훨씬 짧고 안전한 답변- 비밀번호 메커니즘을 전혀 쓰지 말고 검증 된 메커니즘을 사용하십시오.

  • PHP 5.5 이상 : password_hash () 는 좋은 품질이며 PHP 코어의 일부입니다.
  • 이전 PHP 버전 : OpenWall의 phpass 라이브러리는 WordPress, Drupal 등에 사용되는 대부분의 사용자 정의 코드보다 훨씬 낫습니다.

대부분의 프로그래머에게는 취약점을 도입하지 않고 암호화 관련 코드를 안전하게 작성할 수있는 전문 지식이 없습니다.

빠른 자체 테스트 : 비밀번호 확장이란 무엇이며 얼마나 많은 반복을 사용해야합니까? 당신이 답을 모른다면, 당신은 사용해야 password_hash()스트레칭 암호가 현재 암호 메커니즘의 중요한 기능입니다으로 인해 더 빠른 CPU와의 사용, GPU가 및 FPGA를 의 속도로 암호를 해독하기 위해 초당 추측 수십억 GPU는 ( ).

예를 들어, 5 대의 데스크탑 PC에 설치된 25 개의 GPU를 사용하여 6 시간 내에 8 자의 Windows 암호를 모두 해독 할 수 있습니다 . 이는 특수 문자를 포함하여 모든 8 자 Windows 암호를 열거하고 확인하는 무차별 강제이며 사전 공격이 아닙니다. 2018 년 기준으로, 2018 년 현재 GPU를 더 적게 사용하거나 25 개의 GPU로 더 빨리 크랙 할 수 있습니다.

일반 CPU에서 실행되는 매우 빠른 Windows 암호에 대한 레인보우 테이블 공격도 많이 있습니다. Windows 10에서도 Windows가 여전히 암호를 변경 하거나 확장하지 않기 때문입니다 . Microsoft와 같은 실수를하지 마십시오!

또한보십시오:

  • password_hash()또는 phpass최선의 방법 인지에 대한 훌륭한 답변 .
  • bcrypt, scrypt 및 PBKDF2를 포함한 주요 알고리즘에 대해 권장되는 ‘작업 요소'(반복 횟수)를 제공하는 좋은 블로그 기사 .

답변

암호 해시를 두 가지 방법으로 저장하지 않을 것입니다. 시스템이 사용중인 해시 알고리즘 중 가장 약한 것보다 약하기 때문입니다.


답변

PHP 5.5부터 PHP는 암호 해시 및 암호 확인을위한 간단하고 안전한 기능을 가지고 있습니다 : password_hash ()password_verify ()

$password = 'anna';
$hash = password_hash($password, PASSWORD_DEFAULT);
$expensiveHash = password_hash($password, PASSWORD_DEFAULT, array('cost' => 20));

password_verify('anna', $hash); //Returns true
password_verify('anna', $expensiveHash); //Also returns true
password_verify('elsa', $hash); //Returns false

password_hash()사용되며, 이는 임의의 염을 생성하고 (비용 및 사용되는 알고리즘. 함께) 출력 된 해시를 포함하고 password_verify()그 해시를 판독하여 사용하는 염 및 암호화 방식을 결정하고, 제공하는 평문의 패스워드에 대한 검증하고 그것을.

제공된 PASSWORD_DEFAULTPHP 버전의 기본 해싱 알고리즘을 사용하도록 PHP에 지시합니다. 정확히 어떤 알고리즘을 의미하는지는 향후 버전에서 시간이 지남에 따라 변경되어 항상 가장 강력한 알고리즘 중 하나가 될 것입니다.

비용을 높이면 (기본값은 10) 해시가 무차별 대입이 어려워 지지만 해시를 생성하고 암호를 확인하는 것이 서버의 CPU에 더 효과적입니다.

기본 해싱 알고리즘이 변경 될 수 있지만 사용 된 알고리즘이 해시에 저장되어 password_verify()선택 되기 때문에 이전 해시는 계속해서 잘 확인 됩니다.


답변

질문에 대한 답변이 있지만 해싱에 사용되는 솔트는 무작위이며 첫 번째 답변에서 제안한 이메일 주소와 달라야한다는 점을 반복하고 싶습니다.

자세한 설명은 http://www.pivotalsecurity.com/blog/password-hashing-salt-should-it-be-random/에서 확인할 수 있습니다 .

최근에 무작위 비트로 소금에 절인 암호 해시가 추측 가능한 소금이나 소금으로 소금에 절인 암호 해시보다 안전한지에 대한 토론이있었습니다. 보자 : 무작위 소금을 저장하는 시스템뿐만 아니라 암호를 저장하는 시스템이 손상되면 공격자는 소금이 무작위이든 아니든 상관없이 해시와 소금에 액세스 할 수 있습니다. 공격자는 미리 계산 된 레인보우 테이블을 생성하여 해시를 해독 할 수 있습니다. 여기에 흥미로운 부분이 있습니다. 미리 계산 된 테이블을 생성하는 것은 그리 쉬운 일이 아닙니다. WPA 보안 모델을 예로 들어 보겠습니다. WPA 암호는 실제로 무선 액세스 포인트로 전송되지 않습니다. 대신 SSID (Linksys, Dlink 등의 네트워크 이름)로 해시됩니다. 이것이 어떻게 작동하는지에 대한 아주 좋은 설명이 여기 있습니다. 해시에서 비밀번호를 검색하려면 솔트 (네트워크 이름)뿐만 아니라 암호도 알아야합니다. Church of Wifi는 이미 1000 개의 상위 SSID와 약 1 백만 개의 비밀번호를 가진 사전 계산 된 해시 테이블을 가지고 있습니다. 모든 테이블의 크기는 약 40GB입니다. 사이트에서 읽을 수 있듯이 누군가가 3 일 동안 15 개의 FGPA 어레이를 사용하여 이러한 테이블을 생성했습니다. 피해자가 SSID를 “a387csf3″로 사용하고 암호를 “123456”으로 사용한다고 가정하면 해당 테이블에 의해 크랙됩니까? 아니! .. 그럴 순 없어. 암호가 약하더라도 테이블에 SSID a387csf3에 대한 해시가 없습니다. 이것이 무작위 소금의 아름다움입니다. 사전 계산 테이블에서 번성하는 크래커를 막을 것입니다. 결정된 해커를 막을 수 있습니까? 아마 아닙니다. 그러나 무작위 소금을 사용하면 추가적인 방어 층이 제공됩니다. 우리가이 주제에있는 동안 임의의 소금을 별도의 시스템에 저장하는 추가 이점에 대해 논의하겠습니다. 시나리오 # 1 : 비밀번호 해시는 시스템 X에 저장되고 해싱에 사용 된 솔트 값은 시스템 Y에 저장됩니다. 이러한 솔트 값은 추측 가능하거나 알려져 있습니다 (예 : 사용자 이름) 시나리오 # 2 : 비밀번호 해시는 시스템 X에 저장되며 솔트 값은 해싱은 시스템 Y에 저장됩니다. 이러한 솔트 값은 임의적입니다. 추측 할 수 있듯이 시스템 X가 손상된 경우 별도의 시스템 (시나리오 # 2)에서 랜덤 솔트를 사용하면 큰 이점이 있습니다. 공격자는 해시를 해독 할 수 있도록 추가 값을 추측해야합니다. 32 비트 솔트를 사용하는 경우 추측되는 각 비밀번호마다 2 ^ 32 = 4,294,967,296 (약 42 억 건)의 반복이 필요할 수 있습니다. 비밀번호 해시는 시스템 X에 저장되고 해싱에 사용 된 솔트 값은 시스템 Y에 저장됩니다. 이러한 솔트 값은 추측 가능하거나 알려져 있습니다 (예 : 사용자 이름) 시나리오 # 2 : 비밀번호 해시는 시스템 X에 저장되고 해싱에 사용 된 솔트 값은 이 염분 값은 무작위입니다. 추측 할 수 있듯이 시스템 X가 손상된 경우 별도의 시스템 (시나리오 # 2)에서 랜덤 솔트를 사용하면 큰 이점이 있습니다. 공격자는 해시를 해독 할 수 있도록 추가 값을 추측해야합니다. 32 비트 솔트를 사용하는 경우 추측되는 각 비밀번호마다 2 ^ 32 = 4,294,967,296 (약 42 억 건)의 반복이 필요할 수 있습니다. 비밀번호 해시는 시스템 X에 저장되고 해싱에 사용 된 솔트 값은 시스템 Y에 저장됩니다. 이러한 솔트 값은 추측 가능하거나 알려져 있습니다 (예 : 사용자 이름) 시나리오 # 2 : 비밀번호 해시는 시스템 X에 저장되고 해싱에 사용 된 솔트 값은 이 염분 값은 무작위입니다. 추측 할 수 있듯이 시스템 X가 손상된 경우 별도의 시스템 (시나리오 # 2)에서 랜덤 솔트를 사용하면 큰 이점이 있습니다. 공격자는 해시를 해독 할 수 있도록 추가 값을 추측해야합니다. 32 비트 솔트를 사용하는 경우 추측되는 각 비밀번호마다 2 ^ 32 = 4,294,967,296 (약 42 억 회)의 반복이 필요할 수 있습니다. 이 소금 값은 무작위입니다. 추측 할 수 있듯이 시스템 X가 손상된 경우 별도의 시스템 (시나리오 # 2)에서 랜덤 솔트를 사용하면 큰 이점이 있습니다. 공격자는 해시를 해독 할 수 있도록 추가 값을 추측해야합니다. 32 비트 솔트를 사용하는 경우 추측되는 각 비밀번호마다 2 ^ 32 = 4,294,967,296 (약 42 억 회)의 반복이 필요할 수 있습니다. 이 소금 값은 무작위입니다. 추측 할 수 있듯이 시스템 X가 손상된 경우 별도의 시스템 (시나리오 # 2)에서 랜덤 솔트를 사용하면 큰 이점이 있습니다. 공격자는 해시를 해독 할 수 있도록 추가 값을 추측해야합니다. 32 비트 솔트를 사용하는 경우 추측되는 각 비밀번호마다 2 ^ 32 = 4,294,967,296 (약 42 억 회)의 반복이 필요할 수 있습니다.


답변

PHP 5.5에는 래퍼를 제공하는 암호 해싱 API 가 포함되어 있음을 지적하고 싶습니다 crypt(). 이 API는 암호 해시 해시, 확인 및 재해시 작업을 크게 단순화합니다. 필자는 PHP 5.3.7 이상을 사용 하는 사용자를 위해 호환성 팩 (단순 require하게 사용 하는 단일 password.php 파일 형식)을 출시했으며 지금이 기능을 사용하려고합니다.

현재는 BCRYPT 만 지원하지만 다른 암호 해싱 기술을 포함하도록 쉽게 확장되는 것을 목표로하며 기술과 비용이 해시의 일부로 저장되므로 선호하는 해싱 기술 / 비용을 변경해도 현재 해시, 프레임 워크가 무효화되지 않습니다. 자동으로 검증 할 때 올바른 기술 / 비용을 사용합니다. 또한 명시 적으로 자신을 정의하지 않은 경우 “보안”소금 생성을 처리합니다.

API는 다음과 같은 네 가지 기능을 제공합니다.

  • password_get_info() -주어진 해시에 대한 정보를 반환
  • password_hash() -비밀번호 해시를 만듭니다.
  • password_needs_rehash()-주어진 해시가 주어진 옵션과 일치하는지 확인합니다. 해시가 현재 기술 / 비용 체계를 준수하는지 확인하여 필요한 경우 다시 해시 할 수 있습니다.
  • password_verify() -비밀번호가 해시와 일치하는지 확인

현재이 함수는 PASSWORD_BCRYPT 및 PASSWORD_DEFAULT 비밀번호 상수를 허용합니다. 이는 현재 동의어입니다. PASSWORD_DEFAULT는 “새로운, 강력한 해싱 알고리즘이 지원 될 때 최신 PHP 릴리스에서 변경 될 수 있습니다.” 로그인시 PASSWORD_DEFAULT 및 password_needs_rehash ()를 사용하고 (필요한 경우 다시 해싱) 해시가 거의 또는 전혀 작동하지 않는 무차별 대입 공격에 대해 합리적으로 탄력적이어야합니다.

편집 : 나는 이것이 Robert K의 대답에 간략하게 언급되어 있음을 깨달았습니다. 이 답변은 작동 방식과 보안을 모르는 사람들에게 제공하는 사용 편의성에 대해 조금 더 많은 정보를 제공한다고 생각하므로 여기에 남겨 두겠습니다.


답변

필자 는 거의 모든 PHP 프로젝트에서 매우 쉽게 구현할 수있는 간단한 단일 파일 PHP 클래스 인 Phpass 를 사용 하고 있습니다. H 참조 .

기본적으로 Phpass에서 구현 된 가장 강력한 암호화를 사용했습니다.이 암호화는 bcryptWordPress와 같은 프레임 워크와의 호환성을 제공하기 위해 MD5까지 다른 암호화로 대체 됩니다.

반환 된 해시는 그대로 데이터베이스에 저장 될 수 있습니다. 해시 생성을위한 샘플 사용은 다음과 같습니다.

$t_hasher = new PasswordHash(8, FALSE);
$hash = $t_hasher->HashPassword($password);

비밀번호를 확인하기 위해 다음을 사용할 수 있습니다.

$t_hasher = new PasswordHash(8, FALSE);
$check = $t_hasher->CheckPassword($password, $hash);