제목 | md5 적용 중 코드 에러 | ||
---|---|---|---|
글쓴이 | gony | 작성시각 | 2013/12/12 15:48:04 |
|
|||
function bytexor($a,$b){
$c = "";
for($i=0;$i<16;$i++){
$c .= $a{$i}^$b{$i};
}
return $c;
}
function decrypt_md5($msg,$key){
$string = "";
$buffer = "";
$key2 = "";
while($msg){
$key2 = pack("H*",md5($key.$key2.$buffer));
$buffer = bytexor(substr($msg,0,16),$key2);
$string .= $buffer;
$msg=substr($msg,16);
}
return($string);
}
상위 코드에서 빨간 글자부분에서 에러가 발생합니다. 하지만 결과는 잘 받아옵니다. CI를 적용하지 않은 PHP에서는 에러 없이 실행되는데, CI를 적용한 페이지 에서는 에러를 발생합니다.(결과도 잘 받아옵니다.) *에러내용--------------------------------------------------------------------------------------------------------------------------------------- Severity: Notice Message: Uninitialized string offset: 9 Filename: config/encryptFunc.dat Line Number: 8 (빨간 글자 줄) *에러내용---------------------------------------------------------------------------------------------------------------------------------------왜이런 현상이 발생하는 걸까요 ? |
|||
다음글 | ci_session에서 $config['sess_tim... (3) | ||
이전글 | 모바일 페이지를 만들고 있는데요; (3) | ||
gony
/
2013/12/12 16:10:22 /
추천
0
|
변종원(웅파)
/
2013/12/12 18:20:58 /
추천
0
메세지에 답이 다 있는데요? 그리고 에러가 아니라 실행은 되는 notice입니다.
Ci는 미리 선언하지않은 변수 사용하면 경고 뱉어냅니다. 메세지에 있는 config디렉에 았는 파일 열어보세요
|
letsgolee
/
2013/12/13 12:55:46 /
추천
0
Uninitialized string offset: 9 이란 에러는 주어진 스트링이 9글자일 가능성이 높네요. offset은 0부터 시작하니까요.
함수를 보면 $msg가 substr($msg,0,16)에 의해 16자이내로 잘리는데 만일 $msg가 16자보다 못하게 되면 bytexor의 첫번째 파라미터 $a에는 16자가 되지 않는 스트링이 입력됩니다. 따라서 $a{$i}에서 $i가 스트링 길이 이상의 값을 갖게되면 스트링 offset을 넘기게 되는 notice에러가 뜨게 되죠. $b는 md5를 돌린 거니까 항상 16자 이상이 나옵니다. 해결하려면 $a{$i}를 (isset($a{$i}) ? $a{$i} : null) 이런 식으로 변경하여야 합니다. null이 와야 할지 '' 혹은 0인지는 테스트해보고 결정하면 됩니다. |
늘 사용했습니다만, 결과도 정상적으로 나오는데 에러가 마구마구 뜨네요...