2016-12-21 6 views
1

디코드 될 때 base64 문자열 ADEwNjcANDEzNDgxODdCNjcyNzIxMzU5NjU1M0VBM0JFOEE5QzM=106741348187B6727213596553EA3BE8A9C3입니다. 106741348187B6727213596553EA3BE8A9C3을 base64로 인코딩하면 결과는 MTA2NzQxMzQ4MTg3QjY3MjcyMTM1OTY1NTNFQTNCRThBOUMz입니다.base64 로의 인코딩

인코딩되지 않은 문자열은 사용자 ID와 인증 토큰이 결합되어 있기 때문에 인코딩되지 않은 문자열이 첫 번째 base64 문자열의 입력임을 확신합니다. 따라서 base64에서 디코딩하면이 두 개의 특정 문자열이 조인됩니다. 그러나 인코딩 결과는 디코딩 된 문자열과 다른 결과를 낳습니다. 인코딩되지 않은 문자열은 base64 문자열로 인코딩 된 후 정확히 어떻게 시작됩니까?

답변

1

문제는 입력을 디코딩 한 결과가 106741348187B6727213596553EA3BE8A9C3이 아니라는 것입니다. 그것은 \01067\041348187B6727213596553EA3BE8A9C3입니다. 두 개의 null 바이트는 다시 인코딩하기 전에 제거 된 것으로 간주됩니다. 당신은 디코딩하고 그 널 (null)을 제거하지 않고 다시 인코딩하는 경우

, 당신은 다시 입력을 얻을 :

$ echo "ADEwNjcANDEzNDgxODdCNjcyNzIxMzU5NjU1M0VBM0JFOEE5QzM=" | base64 -d | base64 
ADEwNjcANDEzNDgxODdCNjcyNzIxMzU5NjU1M0VBM0JFOEE5QzM= 

더 나은, 무슨 일이야 참조하여 디코더에 의해 출력되는 실제 바이트를보고 :

$ echo "ADEwNjcANDEzNDgxODdCNjcyNzIxMzU5NjU1M0VBM0JFOEE5QzM=" | base64 -d | od -c 
0000000 \0 1 0 6 7 \0 4 1 3 4 8 1 8 7 B 6 
0000020 7 2 7 2 1 3 5 9 6 5 5 3 E A 3 B 
0000040 E 8 A 9 C 3 
0000046 
+0

필자는 필연적 인 것은 아니지만 디코드 출력을 보지 못했다고 생각합니다. 거기에 사용하는 인코더는 무엇입니까? PHP의 base64_encode를 사용하고 있습니다. PHP 같은 잘 정립 된 언어가 부적절한 base64 인코딩 기능을 가져야하는 몇 가지 이유가 있습니까? –

+0

출력 결과가 도움이되었습니다. 내 디코딩 방법이 null 바이트를 표시하지 않았습니다. –

+0

감사합니다. 배시가 그 기능을 가지고 있다는 것을 깨닫지 못했기 때문에 이것은 나에게 유익한 일이다. –