>  기사  >  백엔드 개발  >  PHP 사용자 비밀번호 암호화 알고리즘 예시 분석

PHP 사용자 비밀번호 암호화 알고리즘 예시 분석

墨辰丷
墨辰丷원래의
2018-06-01 10:00:121513검색

이 글에서는 주로 PHP 사용자 비밀번호 암호화 알고리즘을 소개하고, Discuz 암호화 알고리즘의 원리를 보다 자세히 분석하며, .net 알고리즘의 구현 방법을 예제와 비교하여 PHP에서 사용자 암호화의 프로세스와 구현 방법을 요약합니다. 필요한 것은 친구들이 참고하면 됩니다

오늘 Discuz를 2차 개발용으로 사용하다가 코드에서 Discuz 사용자 이름과 비밀번호를 확인해야 했는데, 그러다가 Discuz 포럼에 두 개가 있어서 실수로 함정에 빠졌습니다. 사용자 데이터를 저장하는 테이블 중 하나는 Discuz 데이터베이스 ultrax의 pre_common_member에 있고, 다른 하나는 UCenter 데이터베이스 ucenter의 uc_members 테이블에 저장되어 있습니다. ultrax 라이브러리에 있는 pre_common_member 데이터와 그 비밀번호가 어떻게 생성되는지 연구하는 데 많은 시간을 보냈습니다. 그 결과, 무작위로 생성된 솔트를 인터넷에서 검색해서 발견했습니다

이 무작위로 생성된 솔트를 어떻게 사용할 수 있는지 궁금합니다. . 로그인 시 인증은 어떻게 되나요? 그런데 온라인에서 Discuz는 실제로 해당 비밀번호를 전혀 사용하지 않는다고 하더군요. 직접 테스트해본 결과, pre_common_member에서 사용자 비밀번호를 변경해도 여전히 정상적으로 로그인이 되는 것 같았습니다. 그로 인해 나는 큰 우회로를 겪게 되었습니다.

자, 요점을 말하자면 Discuz의 비밀번호 암호화 알고리즘은 실제로 2개의 MD5 암호화입니다. 먼저 일반 텍스트로 한 번 암호화한 다음 무작위로 솔트를 생성한 다음 첫 번째 암호 텍스트 뒤에 솔트를 일반 텍스트로 추가하고 MD5를 다시 수행합니다. 암호화. 솔트는 uc_members 테이블에 저장되며 사용자 이름으로 얻을 수 있습니다.

이렇게:

MD5(MD5(일반 텍스트) + 솔트)

다음은 .net의 구현 코드입니다:

string GetDiscuzPWString(string sourceStr, string salt)
{
   return GetMd5Hash(string.Concat(GetMd5Hash(sourceStr),salt));
}
string GetMd5Hash(string input)
{
  MD5 md5Hasher = MD5.Create();
  byte[] data = md5Hasher.ComputeHash(Encoding.Default.GetBytes(input));
  StringBuilder sBuilder = new StringBuilder();
  for (int i = 0; i < data.Length; i++)
  {
    sBuilder.Append(data[i].ToString("x2"));
  }
  return sBuilder.ToString();
}

비밀번호 판단 방법 요약:

① UC

를 설치하려면 ② 데이터베이스를 열고 uc_members 테이블을 찾아 마지막 필드 "salt"를 찾은 후 내부 값을 복사하세요.

3 의사 코드:

$s=md5(md5("密码")."salt字段的值");
echo $s;

4 IF를 사용하여 판단

⑤ 다시 말해보세요! 그 난수는 6자리입니다!

요약: 위 내용이 이 글의 전체 내용입니다. 모든 분들의 공부에 도움이 되었으면 좋겠습니다.

관련 권장 사항:

PHP 메모리 캐싱 기능 memcached의 자세한 그림 및 텍스트 설명 memcached

php캡슐화된 smarty 클래스 케이스

php캡슐화된 smartyBC 클래스

위 내용은 PHP 사용자 비밀번호 암호화 알고리즘 예시 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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