| 제목 | 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인지는 테스트해보고 결정하면 됩니다.  | 
                    
늘 사용했습니다만, 결과도 정상적으로 나오는데 에러가 마구마구 뜨네요...