vale92 (Normal User)
Newbie
Messaggi: 18
Iscritto: 01/05/2013
|
Ciao a tutti, Ho una stringa in base64, che mi arriva in input da un client esterno, che devo convertire in byte Utilizzo il metodo Frombase64. La lunghezza della stringa deve però essere un multiplo di 4. Ho pensato allora di concatenare un simbolo (= o +) alla stringa originale in modo da ottenere la lunghezza ideale. Che simbolo potrei aggiungere, che non alteri il significato della stringa originale? Grazie mille
|
|
nessuno (Normal User)
Guru^2
Messaggi: 6404
Iscritto: 03/01/2010
|
Usa il carattere =
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
vale92 (Normal User)
Newbie
Messaggi: 18
Iscritto: 01/05/2013
|
Grazie! Ho provato con = ma mi dice che contiene un carattere non valido(la stringa originale è corretta e contiene i caratteri ammessi dal base64, ho controllato). Inserendo il + non mi appare questo errore e sembrerebbe convertirmelo in byte. Come capisco però che la conversione è corretta e non altera il dato originale? Ho cercato un po' su internet la differenza tra i due diversi simboli, ma non credo di averla capita bene. In base64 che cosa rappresentano? Potrebbero alterare la mia stringa originale? Grazie mille!
|
|
vale92 (Normal User)
Newbie
Messaggi: 18
Iscritto: 01/05/2013
|
In realtà ho visto che per ottenere la lunghezza corretta dovrei aggiungere solo due = finali al massimo. La mia stringa, ad esempio, richiede invece 3 caratteri da aggiungere per ottenere la lunghezza corretta. Inserendo 3 + l'errore non mi compare e sembrerebbe andare a buon fine, come ti avevo già scritto. Ma non credo sia corretto perché guardando su Internet ho visto che come padding character si deve usare = come mi avevi consigliato tu (@nessuno). Io eseguo un ciclo per la lunghezza della stringa che controlla che il modulo sua uguale a zero e se è cero concatena gli =. Quale potrebbe essere il terzo carattere? Come posso fare? Grazie
|
|
Thejuster (Admin)
Guru^2
Messaggi: 2306
Iscritto: 04/05/2008
|
[ Pls, non creare tanti topic per una singola domanda. ]
Utilizza === invece di 1
Una volta convertita la stringa ti basta usare un regex.
ed il gioco è fatto.
Codice sorgente - presumibilmente C# / VB.NET |
Regex regex = new Regex(@"==="); //simboli
string[] val = regex.Split("Y2F6em9vb29vb29vb29vb29vb28==="); //stringa di esempio
Console.WriteLine(val[0]); //risultato
|
|
|
vale92 (Normal User)
Newbie
Messaggi: 18
Iscritto: 01/05/2013
|
Grazie! Quindi poi dopo il regex dovrei passare la stringa val a frombase64string per convertirla?
Codice sorgente - presumibilmente C# / VB.NET |
Regex regex = new Regex(@"==="); //simboli string[] val = regex.Split("Y2F6em9vb29vb29vb29vb29vb28==="); Byte[] b = convert.frombase64string(val);
|
Sarebbe giusto?
|
|
Thejuster (Admin)
Guru^2
Messaggi: 2306
Iscritto: 04/05/2008
|
no
non puoi convertire una stringa codifica in byte.
Tranne se non stai utilizzando qualche dll esterna che ovviamente non posso saperlo.
Ma normalmente, devi ricordare bene cosa cosa stai convertendo ed in quale modalità.
ad esempio, UTF8 è un conto e ASCII un'altro.
Sono sicuro che il base64 di default è UTF8.
quindi devi convertire usando Encoding.UTF8.GetBytes(val);
altrimenti andrai ad incasinare qualcosa di sicuro.
|
|
vale92 (Normal User)
Newbie
Messaggi: 18
Iscritto: 01/05/2013
|
Grazie per la risposta. Scusa ma non credo di aver ancora capito bene cosa dovrei fare Non utilizzo nessuna libreria esterna. A me arriva una stringa in base64- ascii, che devo convertire in byte per poterla utilizzare successivamente. Su internet ho trovato che si può fare utilizzando il metodo Frombase64string. Per esempio ho la stringa:
Codice sorgente - presumibilmente C# / VB.NET |
String str = "Y2F6em9vb29vb29vb29vb29vb"
|
Questa ha una lunghezza non valida. Così eseguo un ciclo per verificare che sia un multiplo di 4 e aggiungo '=' finché non raggiunge la lunghezza corretta.
Codice sorgente - presumibilmente C# / VB.NET |
While (str.lenght % 4 != 0) Str = str + "="
|
Cosi ottengo: Y2F6em9vb29vb29vb29vb29vb=== A questo punto cerco di convertirlo in byte:
Codice sorgente - presumibilmente Plain Text |
Byte[] b = convert.frombase64string(str)
|
Ma poiché utilizzo === mi dà l'errore poiché come padding character sono consentiti solo due == Dici quindi di passare il convertimento in utf8 prima del frombase64string? Grazie ancora! |
|
Thejuster (Admin)
Guru^2
Messaggi: 2306
Iscritto: 04/05/2008
|
Uhmm....
Come altri simboli ne esistono 2
C'è il punto ( . )
è underscore ( _ )
che non dovrebbero dare problemi
puoi testare qui
https://www.base64decode.org/
e aggiungi esempio Y2lhb29vbw== con . finale o underscore _
Y2lhb29vbw==.
non dovrebbe dare errore. fai un tentativo
|
|