2013-09-29 2 views
1

약간의 보안을 위해 사용하는 암호화가 있지만 암호화 된 문자열의 끝에 항상 % 3D가있는 것으로 나타났습니다. 그 이유는 확실하지 않습니다. .암호화 루틴은 출력 마지막에 % 3D를 추가합니다.

private static function encrypt($str, $key) 
{ 
    $result = null; 
    for ($i = 0; $i < strlen($str); $i++) { 
     $char = substr($str, $i, 1); 
     $keyChar = substr($key, ($i % strlen($key)) - 1, 1); 
     $char = chr(ord($char) + ord($keyChar)); 
     $result .= $char; 
    } 

    return urlencode(base64_encode($result)); 
} 

나는 눈부신 것을 볼 수 없습니다.

문자열을 해독 할 때 문자열 끝에 여분의 % 3D를 수동으로 제거 할 때 오류가 없습니다.

그렇게

는 bnNMTXc0Sjc는 % 3D

bnNMTXc0Sjc는

같은 암호를 해독 것 모두. 암호화 된 문자열을 정리하여 끝에 여분의 문자가 없도록하고 싶습니다.

감사

+5

Base64로'='로 출력을 채 웁니다에게 발생하지 않습니다베이스 (64)의 끝 부분에 =로 URL 인코딩. '='URL 인코딩은'% 3D'입니다. – Ryan

+0

적절한 암호화를 사용하지 않는 이유는 무엇입니까? 'mcrypt_encrypt' 함수는 비교적 쉽고,이 함수보다 훨씬 안전합니다. (공격적은 아니지만, 자신이하는 일을 알고있는 사람들이 작성한 동료 검토 코드는 훨씬 안전합니다.) –

답변

2
+0

아 나는 그것을 완전히 놓쳤다. 인코딩에서 패딩을 제거 할 수있는 방법이 있는지 또는 주요 보안 문제인지 여부입니다. – MadScientist

+0

rtrim을 사용하여 제거 할 수 있지만 ITV는 유효하지 않습니다 64 – exussum

+0

조언을 주셔서 감사합니다. 나는 그것을 제거하기 위해 찾고있는 미학을 위해서만 사용하기 때문에 그대로 두겠습니다. – MadScientist

관련 문제