2012-05-20 3 views
0

base64로 인코딩 된 문자열에 영숫자가 아닌 문자가 포함되지 않도록 보장해야합니까?base64로 인코딩 된 문자열에 영숫자가 아닌 문자가 포함되지 않도록하십시오.

예를 들어 인코딩 할 긴 문자열이있는 경우 base64로 인코딩 할 때 인코딩 된 문자열에 문자와 숫자 만 포함되도록 미리 추가하거나 추가 할 수있는 것이 있습니까? 이런 식으로 뭔가 :

문자열 : 192.168.1.1

인코딩 : MTkyLjE2OC4xLjE= < - 나는 등호의 '제거하기'싶다.

나는 (새 문자열 지금 192.168.1.1}입니다) 문자열의 끝에서 }를 추가했는데,이 (새 인코딩 된 문자열 : MTkyLjE2OC4xLjF9)을 근무하지만 모든 조합이 작동 보장하는 방법이있다?

이것이 가능합니까?

답변

1

당신은 단지 (RTRIM 수 있습니다 ... 당신은 당신이 base64로 디코딩을 시도하기 전에 4 자의 배수를 만들기 위해 = 기호를 추가 확인, 출력에서 ​​=를 제거하는)이있다 대부분의 사람들이하는 것처럼 거리 표지판과 같습니다.

하지만 질문과 같이 : 문자열/3의 길이가 정수일 때. 그래서 - 그래서 당신이 그들을 유지하기 위해 필요 없어요 당신이 다시 문자열을 통과 할 때

$pad = strlen($str) % 3; if($pad) { $str .= str_repeat(' ', $pad); } 

하지만 네, 추가 할 것입니다 파서는 다시 자동으로 그냥 같은에서, 4의 배수 표지판 같습니다.

+0

$ str = AAA $ pad = 0이면 문제가되지 않지만 $ str = AAAA $ pad = 1 따라서 등호를 피하기 위해 두 번해야하지만 $ str = AAAAA $ pad = 2 같은 문제는 한 번이 아니라 두 번 반복됩니다. 그래서 그것은 $ pad = strlen ($ string) % 3; if ($ pad == 1) { $ string. = str_repeat ('Q', 2); } elseif ($ pad == 2) { $ string. = str_repeat ('Q', 1); } else { $ pad = '0'; } – bart

1

약 길이입니다. = 기호는 출력을 4 개의 base64 문자의 배수로 만들기 위해 패딩입니다. 3 문자는 4 개의 기본 64 문자로 변환되므로 입력 문자열에 어떻게 든 3 문자의 길이를 여러 번 입력해야합니다. 귀하의 경우 :

192.168.1.1 - 11 characters long, base64 ends with = 
192.168.1.1$ - 12 characters long, base64 doesn't end with = 

쉽게 제거 할 수있는 패딩 문자를 선택하십시오.

다른 대안은

+0

흥미 롭습니다. 그래서 문자열을 반환하기 전에 문자열에 삼진 (ternary)과 같은 것을해야합니다 (인코딩 된 문자열을 생성하는 함수를 사용하는 경우). 영숫자가 아닌 문자로 끝나지 않도록해야합니다. –

+2

이것은'base64' 정의의 일부입니다. 인코딩은 또한 64 비트를 수용 할 수 있도록 여러 영숫자가 아닌 문자를 사용합니다 (인코딩 된 문자열에는'/'또는'+ '도 포함될 수 있음). 이것이 받아 들일 수 없다면, 해킹하지 말고'base64'에 대한 대안을 찾아야합니다. (base62라는 사양이 더 적합 할 수도 있습니다.) http://en.wikipedia.org/wiki/Base64 – tripleee

관련 문제