PHP mysql 4.1~5.x에서 old_password() 함수
페이지 정보
본문
php 5.2.x, mysql 4.1.x 환경
The Original (Pre-4.1) Hashing Method
The original hashing method produced a 16-byte string. Such hashes look like this:
mysql> SELECT PASSWORD('1111');
+----------------------------------------------------------------------------+
| PASSWORD('1111') |
+----------------------------------------------------------------------------+
| 45271aba0b765d95 |
+----------------------------------------------------------------------------+
In MySQL 4.1.1, the hashing method was modified to produce a longer 41-byte hash value:
mysql> SELECT PASSWORD('1111');
+----------------------------------------------------------------------------+
| PASSWORD('1111') |
+----------------------------------------------------------------------------+
| *89C6B530AA78695E257E55D63C00A6EC9AD3E977 |
+----------------------------------------------------------------------------+
기존에 사용중인 DB의 password는 old_passwords=0 인 상태
새로운 환경에서는 old_passwords=1 인 상태
기존 사용자의 비밀번호 사용이 불가능한 상황
[ 해결방법 ]
1. 모든 회원들에게 비밀번호 재입력을 요구 -> id와 식별 불가 (X)
2. 호스팅 업체에 old_passwords=0 상태로 만들어달라 요청 (X)
3. 새로운 password를 생성해주는 함수 사용 (O)
<?php
// mysql old_password 해결 function
// 작성 : 해피정닷컴 www.happyjung.com
// 출처 : http://mytory.net/archives/3120
function old_password($password) {
$nr=0x50305735;
$nr2=0x12345671;
$add=7;
$charArr = preg_split("//", $password);
foreach ($charArr as $char) {
if (($char == '') || ($char == ' ') || ($char == '\t')) continue;
$charVal = ord($char);
$nr ^= ((($nr & 63) + $add) * $charVal) + ($nr << 8);
$nr2 += ($nr2 << 8) ^ $nr;
$add += $charVal;
}
return sprintf("%08x%08x", ($nr & 0x7fffffff), ($nr2 & 0x7fffffff));
}
// mysql old password 해결위해 function
//사용방법
echo old_password($p_pw);
?>
참고자료
http://dev.mysql.com/doc/refman/5.1/en/password-hashing.html
http://mytory.net/archives/3120
The Original (Pre-4.1) Hashing Method
The original hashing method produced a 16-byte string. Such hashes look like this:
mysql> SELECT PASSWORD('1111');
+----------------------------------------------------------------------------+
| PASSWORD('1111') |
+----------------------------------------------------------------------------+
| 45271aba0b765d95 |
+----------------------------------------------------------------------------+
In MySQL 4.1.1, the hashing method was modified to produce a longer 41-byte hash value:
mysql> SELECT PASSWORD('1111');
+----------------------------------------------------------------------------+
| PASSWORD('1111') |
+----------------------------------------------------------------------------+
| *89C6B530AA78695E257E55D63C00A6EC9AD3E977 |
+----------------------------------------------------------------------------+
기존에 사용중인 DB의 password는 old_passwords=0 인 상태
새로운 환경에서는 old_passwords=1 인 상태
기존 사용자의 비밀번호 사용이 불가능한 상황
[ 해결방법 ]
1. 모든 회원들에게 비밀번호 재입력을 요구 -> id와 식별 불가 (X)
2. 호스팅 업체에 old_passwords=0 상태로 만들어달라 요청 (X)
3. 새로운 password를 생성해주는 함수 사용 (O)
<?php
// mysql old_password 해결 function
// 작성 : 해피정닷컴 www.happyjung.com
// 출처 : http://mytory.net/archives/3120
function old_password($password) {
$nr=0x50305735;
$nr2=0x12345671;
$add=7;
$charArr = preg_split("//", $password);
foreach ($charArr as $char) {
if (($char == '') || ($char == ' ') || ($char == '\t')) continue;
$charVal = ord($char);
$nr ^= ((($nr & 63) + $add) * $charVal) + ($nr << 8);
$nr2 += ($nr2 << 8) ^ $nr;
$add += $charVal;
}
return sprintf("%08x%08x", ($nr & 0x7fffffff), ($nr2 & 0x7fffffff));
}
// mysql old password 해결위해 function
//사용방법
echo old_password($p_pw);
?>
참고자료
http://dev.mysql.com/doc/refman/5.1/en/password-hashing.html
http://mytory.net/archives/3120
댓글목록
등록된 댓글이 없습니다.