2012-03-26 2 views
7

Sto provando a codificare alcune stringhe avanti e indietro dalla stringa base-64 e sto avendo truble per ottenere il risultato corretto.Codifica stringhe da e verso la base-64

string text = base64string.... //Here I have a base-64 string. 
byte[] encodedByte = System.Text.ASCIIEncoding.ASCII.GetBytes(text); 
string base64Encoded = Convert.ToBase64String(encodedByte); 

if (text == base64Encoded) //If the new encoded string is equal to its original value 
    return base64Encoded; 

Ho fatto del mio modi per farlo e io non riesco a ottenere il risultato giusto. Ho provato entrambi con System.Text.Encoding.Unicode e System.Text.Encoding.UTF8

Quale potrebbe essere il problema? Qualcuno ha una soluzione adeguata?

+0

Ok leggendo il tuo codice stai prendendo una stringa base64 e poi codificandola su base64 quindi confrontando la stringa codificata con quella originale? – Brian

+0

Perché stai iniziando dal modulo codificato? Potresti provare a fare la codifica prima da testo semplice, quindi decodificarla. O stai tentando di implementare l'algoritmo di codifica/decodifica da solo? – Attila

+0

@Brian - Sì, questo è quello che sto facendo. –

risposta

9
string text = base64string.... //Here I have a base-64 string. 
byte[] encodedByte = System.Text.ASCIIEncoding.ASCII.GetBytes(text); 
string base64Encoded = Convert.ToBase64String(encodedByte); 

Si sta eseguendo una doppia codifica della stringa. Si inizia con una stringa base64, si ottengono i byte e quindi lo si codifica nuovamente. Se vuoi confrontare, dovrai iniziare con la stringa originale.

+0

S - Lo so. Quello che voglio è codificare una stringa 64 di base in un altro formato e poi ricodificare di nuovo a base 64, solo per vedere se il risultato della codifica non ha perso alcun dato. So che è un'operazione sciocca, ma voglio farlo comunque. –

+2

@ErikLarsson: Beh, base64 garantisce già che non perderete i dati, quindi non vedo il punto. Tuttavia, se sai cosa ti sto dicendo ... allora qual è la domanda? Ovviamente non otterrai la stessa cosa quando codifichi una stringa ancora e ancora.Inizia con la stringa originale, codificala, decodificala se vuoi veramente controllare. –

6

Se text è una stringa di base-64, allora si sta facendo a ritroso:

byte[] raw = Convert.FromBase64String(text); // unpack the base-64 to a blob 
string s = Encoding.UTF8.GetString(raw); // assume the blob is UTF-8, and 
             // decode to a string 

che vi porterà come string. Si noti, tuttavia, che questo scenario è utile solo per rappresentare un testo unicode in un formato ascii. Normalmente non lo codificherò in base 64 se il contenuto originale è string.

0

Il codice di codifica è stato impostato correttamente. Per verificare se la stringa con codifica Base64 è corretta, si può provare la decodifica e confrontando il contenuto decodificato all'originale:

var decodedBytes = Convert.FromBase64String(base64encoded); 
var compareText = System.Text.Encoding.ASCII.GetString(decodedText); 

if (text == compareText) 
{ 
    // carry on... 
    return base64encoded; 
} 
1

di convertire tutto quello che è che è necessario in Base64 in una matrice Byte quindi utilizzare il FromBase64String e ToBase64String per convertire da e verso Base64:

Byte[] buffer = Convert.FromBase64String(myBase64String1); 
myBase64String2 = Convert.ToBase64String(buffer); 

myBase64String1 sarà pari a myBase64String2. Sarà necessario utilizzare altri metodi per ottenere il tipo di dati in un array Byte e il contrario per ripristinare il tipo di dati. Ho usato questo per convertire il contenuto di una classe in una matrice di byte e quindi in una stringa Base64 e scrivere la stringa sul filesystem. Più tardi l'ho riletto in un'istanza di classe invertendo il processo.