2013-03-14 5 views
30

Powershell에 Base64 텍스트가 포함 된 텍스트 파일의 일반 문자열이 있습니다. $x에 저장됩니다. $x은 PowerShell에서 만든 Base64로 문자열이 있다면 작동Base64 문자열을 디코딩하는 방법은 무엇입니까?

$z = [System.Text.Encoding]::Unicode.GetString([System.Convert]::FromBase64String($x)); 

을 (그러나 그렇지 않다) : 나는 등을 디코딩하는 것을 시도하고있다. 그리고이 파일에서 나온 $x Base64 문자열에서 작동하지 않습니다. $z은 단순히 䐲券과 같은 것으로 끝납니다.

무엇이 누락 되었습니까? 예를 들어 $xYmxhaGJsYWg= 일 수 있으며 blahblah의 경우 Base64입니다. nuthshell에서

, YmxhaGJsYWg= 다음이 파워 쉘 코드에서 문자열로 넣어 텍스트 파일에 있고 나는 그것을 디코딩하지만 base64로 텍스트를 복용 인코딩하지 않는다 䐲券

+0

Base64로 인코딩 된 문자열은 항상 원본 데이터보다 더 길어질 수 있습니다 여기에 문제에 대한 내 수정 프로그램입니다.당신은 거꾸로 뭔가있는 것처럼 보입니다. –

+0

@RogerLipscombe 죄송합니다. – JBurace

답변

35

와 끝까지하려고 텍스트를 base64로 되 돌리는 디코딩? 너는 그들을 여기에서 섞고있는 것 같다. 내가 this online decoder를 사용하여 디코딩 할 때 내가 얻을 : 주위

BASE64: blahblah 
UTF8: nVnV 

이 아닌 다른 방법으로. 나는 PS에서 완전히 그것을 재현 할 수 없다. 아래 샘플 참조 : 지금 당신은 적절한 질문을 마련했다고

PS > [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String("blahblah")) 
nV�nV� 

PS > [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes("nVnV")) 
blZuVg== 

편집을, 나는 대답을 시도 할 수 있습니다. 나는 당신이 당신의 텍스트에 대해 잘못된 인코더를 사용하고 있다고 생각합니다. 인코딩 된 base64 문자열은 UTF8 (또는 ASCII) 문자열로 인코딩됩니다.

PS > [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String("YmxhaGJsYWg=")) 
blahblah 

PS > [System.Text.Encoding]::Unicode.GetString([System.Convert]::FromBase64String("YmxhaGJsYWg=")) 
汢桡汢桡 

PS > [System.Text.Encoding]::ASCII.GetString([System.Convert]::FromBase64String("YmxhaGJsYWg=")) 
blahblah 
+0

이미 인코딩 된 문자열'nVnV'을 가지고 있으며이를 해독하려고합니다. 저에게 거꾸로 "blahblah"는 사람이 읽을 수있는 문자열이고 "nVnV"는 디코딩해야하는 인코딩 된 문자열입니다. – JBurace

+0

업데이트 된 답변보기 나는 그것을 재현 할 수는 없지만 "blahblah"에서 "nVnV"(base64)를 어떻게 얻었는지 알 수는 없다. –

+0

OP를 업데이트했습니다. 죄송합니다. 예, 100 % Powershell에서 할 수 있지만 그게 내가하는 일이 아닙니다. Base64는 텍스트 파일에서옵니다. – JBurace

3

Base64 인코딩 네 6 비트 바이트 (64 기수 일명 0-63)에 3 개의 8 비트 바이트 (255)를 변환한다. 4 바이트 각각은 마지막 출력을 4 개의 8 비트 ASCII 문자로 나타내는 ASCII 문자열을 색인화합니다. 인덱싱 된 문자열은 일반적으로 'A-Za-z0-9 + /'이며 '='는 패딩으로 사용됩니다. 이것이 인 코드 된 데이터가 4/3 더 긴 이유입니다.

Base64 디코딩은 반대 과정입니다. 예상대로, 디코딩 된 데이터의 길이는 3/4입니다.

base64 인코딩은 일반 텍스트를 인코딩 할 수 있지만 실제로 인쇄 할 수없는 문자는 시스템을 제어 문자로 전송하여 해석 할 수 있습니다.

원래 포스터 렌더링 $ z는 바이트로 응용 프로그램에 의미가있는 각 비트를 제안합니다. 인쇄 할 수없는 문자를 텍스트로 렌더링하는 것은 일반적으로 시스템의 현지화에 따라 글리프를 생성하는 유니 코드를 호출합니다.

Base64decode ("생명에 대한 답 우주와 모든") 나는 공간 내 출력 사이에 보여주는 문제를했고 아무 대답이 문제를 해결하기 위해 모든 온라인 없었다 00101010

0

=. 말 그대로 솔루션을 찾으려고 많은 시간을 보내고 그 코드를 가지고 노는 것을 찾았습니다. 당시 내가 입력 한 내용을 거의 알지 못했을 때가있었습니다. [System.Text.Encoding]::UTF8.GetString(([System.Convert]::FromBase64String($base64string)|?{$_}))

0

이 페이지에서는 완성도 때문에, base64로 변환하는 방법을 구글 때 나타납니다 :

$b = [System.Text.Encoding]::UTF8.GetBytes("blahblah") 
[System.Convert]::ToBase64String($b) 
관련 문제