2010-06-22 11 views
23

È possibile che una stringa codificata in base 64 contenga spazi bianchi? In particolare, potrebbe contenere spazi bianchi al fine della stringa?Una stringa codificata in base 64 può contenere spazi bianchi?

PS. Sto pensando all'intero "MySQL tratterà spazi bianchi finali quando memorizziamo stringhe nei campi VARCHAR" qui ;-)

+0

P'raps intendo "fa" più di "possibile" ;-) – Dougal

+0

bene è possibile aggiungere spazi bianchi a seconda dell'implementazione ma per lo più saranno semplicemente spogliati in quanto sono effettivamente validi perché non fanno parte dell'alfabeto b64 " "ma spesso incluso per scopi di visualizzazione," readbility "in realtà non lo colpisce perché un" normale "Umano non legge le stringhe b64 in primo luogo – My1

risposta

19

No, non può. Vedere Base64 per il repository carattere ammesso utilizzato da base64, quali sono i caratteri A-Z, a-z, 0-9, + e / (gli ultimi due possono differire a seconda della realizzazione) nonché il carattere di riempimento = (ma che è anche attuazione dipendente alcuni le implementazioni non usano affatto il riempimento).

+4

sì, può, non appartengono al codice, ma nella maggior parte delle implementazioni possono aggiungere per mantenere i readabili ty. La maggior parte dei decodificatori ignora gli spazi bianchi. – jigfox

+0

Sì, è vero ma non sono significativi per la stringa codificata, il che significa che possono essere ignorati in modo sicuro e non importa se MySQL o chiunque li spoglierà. L'intenzione dell'OP è ovviamente quella di memorizzare stringhe 'base64'-codificate in una colonna' VARCHAR' di MySQL che è assolutamente salvata. –

+3

Signori ragazzi, intendevo di più "fa" una stringa base64 contiene spazi - non "can" - colpa mia. Quindi, in conclusione, può, ma sono irrilevanti. :-) Capisco ora – Dougal

1

Wikipedia suggerisce che ci sei come un gazillion varianti della codifica Base64:

http://en.wikipedia.org/wiki/Base64

Quindi la risposta probabilmente dipende da ciò che è necessario fare con la stringa. Ma oserei dire che si è creato in PHP con base64_encode() in modo che sembra essere sicuro di aggiungere spazi vuoti:

<?php 

$original_data = 'Lorem ipsum dolor sit amet'; 
$encoded_data = base64_encode($original_data); 
$padded_data = ' ' . chunk_split($encoded_data, 3, ' ') . ' '; 

echo base64_decode($padded_data); // Prints 'Lorem ipsum dolor sit amet' 

?> 
+0

Un modo per provarlo, suppongo! Grazie – Dougal

0

Per quanto ne so non si può. Fondamentalmente una stringa Base64 deve essere costruita da un set di 64 caratteri. A-Z, a-z, 0-9 fanno 62 - gli altri due dipendono dall'implementazione.

Sulla base di ciò che so, ora esiste un'implementazione che utilizzerà lo spazio bianco come carattere. La ragione principale di ciò è la leggibilità, ovvero una stringa Base64 deve essere facilmente stampata e riconosciuta.

Probabilmente troverai maggiori informazioni a riguardo su Wikipedia.

+0

Utile e interessante. Grazie – Dougal

3

Sì. La stringa con codifica Base64 può contenere spazi bianchi ma i caratteri non sono significativi. Quindi va bene se il database taglia gli spazi.

In effetti, la specifica MIME originale consiglia di interrompere le stringhe Base64 in righe di 72 caratteri. base64Binary di XML può anche includere newlines, tabs, spazi.

In PHP, base64_decode() strisce tutti i caratteri whiltespace in modo da non doversi preoccupare.

12

Non dovrebbe, ma potrebbe fare.

Una stringa base64 valida non dovrebbe contenere spazi poiché l'alfabeto codifica dovrebbe consistere solo AZ az 0-9 +/

Tuttavia, se i dati codificati succede a contenere un '+' carattere, ei dati vengono passato in un URL, può essere convertito involontariamente in uno spazio. Quindi potresti imbatterti in una supposta stringa base64 che sembra avere spazi in essa in queste circostanze.

In tal caso, è sufficiente sostituire gli spazi con i punti positivi prima della decodifica.

PS.Sto pensando di tutta la "spazio bianco MySQL assetterà finali quando si ripone le stringhe nei campi VARCHAR" qui

Per inciso, gli spazi bianchi di trascinamento di un varchar non vengono casualmente spogliati a partire da MySQL 5.0.3

+0

Questo non dovrebbe essere un problema se si utilizza un algoritmo di codifica Base64 sicuro per l'URL :) – Ren

+3

+1 per aver menzionato il problema "+"/spazio. Basta avere una stringa Base64 fornita da URL con i + convertiti in spazi. –

+0

Stavo impazzendo con questo. Grazie! –

Problemi correlati