Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Frombase64 - c#
Forum - C# / VB.NET - Frombase64 - c#

Avatar
vale92 (Normal User)
Newbie


Messaggi: 18
Iscritto: 01/05/2013

Segnala al moderatore
Postato alle 20:58
Venerdì, 19/10/2018
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


Vale
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5869
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 9:41
Sabato, 20/10/2018
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à.
PM Quote
Avatar
vale92 (Normal User)
Newbie


Messaggi: 18
Iscritto: 01/05/2013

Segnala al moderatore
Postato alle 21:53
Sabato, 20/10/2018
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!


Vale
PM Quote
Avatar
vale92 (Normal User)
Newbie


Messaggi: 18
Iscritto: 01/05/2013

Segnala al moderatore
Postato alle 23:11
Sabato, 20/10/2018
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


Vale
PM Quote
Avatar
Thejuster (Member)
Guru^2


Messaggi: 1945
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 23:51
Sabato, 20/10/2018
[ 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

  1. Regex regex = new Regex(@"==="); //simboli
  2. string[] val = regex.Split("Y2F6em9vb29vb29vb29vb29vb28==="); //stringa di esempio
  3.  
  4. Console.WriteLine(val[0]); //risultato



PM Quote
Avatar
vale92 (Normal User)
Newbie


Messaggi: 18
Iscritto: 01/05/2013

Segnala al moderatore
Postato alle 10:35
Domenica, 21/10/2018
Grazie!
Quindi poi dopo il regex dovrei passare la stringa val a frombase64string per convertirla?

Codice sorgente - presumibilmente C# / VB.NET

  1. Regex regex = new Regex(@"==="); //simboli
  2. string[] val = regex.Split("Y2F6em9vb29vb29vb29vb29vb28===");
  3.  Byte[] b = convert.frombase64string(val);



Sarebbe giusto?


Vale
PM Quote
Avatar
Thejuster (Member)
Guru^2


Messaggi: 1945
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 15:31
Domenica, 21/10/2018
Testo quotato


Sarebbe giusto?



no :rotfl:

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.


PM Quote
Avatar
vale92 (Normal User)
Newbie


Messaggi: 18
Iscritto: 01/05/2013

Segnala al moderatore
Postato alle 15:53
Domenica, 21/10/2018
Grazie per la risposta. :) Scusa ma non credo di aver ancora capito bene cosa dovrei fare :d
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

  1. 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

  1. While (str.lenght % 4 != 0)
  2.  Str = str + "="



Cosi ottengo: Y2F6em9vb29vb29vb29vb29vb===

A questo punto cerco di convertirlo in byte:

Codice sorgente - presumibilmente Plain Text

  1. 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! :)


Vale
PM Quote
Avatar
Thejuster (Member)
Guru^2


Messaggi: 1945
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 16:30
Domenica, 21/10/2018
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


PM Quote