2013-03-14 39 views
30

Ho una stringa normale in Powershell che proviene da un file di testo che contiene il testo Base64; è memorizzato in $x. Sto cercando di decodificare come tale:Come decodificare una stringa Base64?

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

Quale funziona se $x era una stringa Base64 creato in PowerShell (ma non è). E questo non funziona sulla stringa Base64 $x proveniente da un file, $z semplicemente finisce come qualcosa come 䐲券.

Cosa mi manca? Ad esempio, $x potrebbe essere YmxhaGJsYWg= che è Base64 per blahblah.

In un nuthshell, YmxhaGJsYWg= è in un file di testo poi messo in una stringa in questo codice PowerShell e cerco di decodificarlo, ma finire con 䐲券 ecc

+0

stringhe con codifica Base64 saranno sempre più lunghi dei dati originali.Sembra che tu abbia qualcosa all'indietro qui. –

+0

@RogerLipscombe Spiacenti, aggiornato. – JBurace

risposta

35

Non è la codifica di prendere il testo in Base64 e decodifica prendendo base64 Ritorna al testo? Sembra che li stiate mescolando qui. Quando ho decodificare usando this online decoder ottengo:

BASE64: blahblah 
UTF8: nVnV 

non il contrario. Non riesco a riprodurlo completamente in PS. Vedere esempio riportato di seguito:

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

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

EDIT Ora che è venuta in mente una domanda adeguata, posso cercare di rispondere. Credo che tu stia usando il codificatore sbagliato per il tuo testo. La stringa base64 codificata è codificata dalla stringa UTF8 (o 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

Ho già una stringa codificata 'nVnV' e sto cercando di decodificarlo. Questo mi sembra al contrario, "blahblah" è la stringa leggibile dall'uomo di cui ho bisogno e "nVnV" è la stringa codificata che ho bisogno di decodificare. – JBurace

+0

vedi risposta aggiornata. Non riesco a riprodurlo, ma non riesco a capire come hai ottenuto "nVnV" (base64) da "blahblah". –

+0

Ho aggiornato il mio OP, mi dispiace. Sì, posso farlo in Powershell al 100% ma non è quello che sto facendo. Base64 proviene da un file di testo. – JBurace

3

codifica Base64 converte tre byte di 8 bit (0-255) in quattro byte 6 bit (0-63 alias base64). Ciascuno dei quattro byte indicizza una stringa ASCII che rappresenta l'output finale come quattro caratteri ASCII a 8 bit. La stringa indicizzata è in genere 'A-Za-z0-9 + /' con '=' usato come padding. Questo è il motivo per cui i dati codificati sono più lunghi di 4/3.

Base64 decoding è il processo inverso. E come ci si aspetterebbe, i dati decodificati sono lunghi 3/4.

Mentre la codifica base64 può codificare il testo normale, il suo vantaggio reale è la codifica di caratteri non stampabili che possono essere interpretati trasmettendo i sistemi come caratteri di controllo.

Suggerisco che il poster originale restituisca $ z come byte con ogni bit che ha significato per l'applicazione. Il rendering di caratteri non stampabili come testo in genere richiama Unicode che produce glifi in base alla localizzazione del sistema.

Base64decode ("la risposta alla vita l'universo e tutto") = 00101010

0

Ho avuto problemi con gli spazi che mostra tra il mio uscita e non c'era nessuna risposta online a tutti per risolvere questo problema. Trascorro letteralmente molte ore cercando di trovare una soluzione e ne ho trovata una da giocare con il codice al punto che quasi non sapevo nemmeno cosa ho digitato nel momento in cui l'ho fatto funzionare. Ecco la mia correzione per il problema: [System.Text.Encoding]::UTF8.GetString(([System.Convert]::FromBase64String($base64string)|?{$_}))

0

In questa pagina si presenta quando si google come convertire a base64, quindi per completezza:

$b = [System.Text.Encoding]::UTF8.GetBytes("blahblah") 
[System.Convert]::ToBase64String($b) 
Problemi correlati