Μετάβαση στο περιεχόμενο

Base64

Από τη Βικιπαίδεια, την ελεύθερη εγκυκλοπαίδεια
Αυτή είναι μια παλιά έκδοση της σελίδας, όπως διαμορφώθηκε από τον InternetArchiveBot (συζήτηση | συνεισφορές) στις 23:03, 18 Μαΐου 2021 (Διάσωση 1 πηγών και υποβολή 0 για αρχειοθέτηση.) #IABot (v2.0.8). Η τρέχουσα διεύθυνση (URL) είναι μόνιμος σύνδεσμος προς αυτή την έκδοση, που μπορεί να διαφέρει σημαντικά από την τρέχουσα έκδοση.

Το base64 είναι ομάδα ομοειδών κωδικοποιήσεων ψηφιακών δεδομένων σε κείμενο. Η κωδικοποίηση αυτή αντιστοιχεί τα μπάιτ ενός αρχείου σε ένα υποσύνολο του ASCII που αποτελείται μόνο από εκτυπώσιμους χαρακτήρες. Κάθε «ψηφίο» ενός κειμένου, κωδικοποιημένου με Base64, αντιστοιχεί σε 6 δυαδικά ψηφία των δυαδικών δεδομένων και επομένως η κωδικοποίηση ενός μπάιτ απαιτεί τουλάχιστον 2 «ψηφία». Πάντα κωδικοποιούνται τρία συνεχόμενα μπάιτ, δηλαδή τα τρία μπάιτ, που αποτελούνται από 8 μπιτ (σύνολο 24 μπιτ), μετατρέπονται σε 4 συνεχόμενα «ψηφία» του συστήματος Base64.[1]

Χρήση

Η μετατροπή σε κωδικοποίηση base64 χρησιμοποιείται ευρέως (αν και πολλές φορές αδιαφανώς) στην ηλεκτρονική αλληλογραφία. Τα επισυναπτόμενα κωδικοποιούνται ως base64 και το πρόγραμμα που τρέχει στον υπολογιστή σας ή στον πάροχο web mail που χρησιμοποιείτε (gmail, yahoo κλπ.) τα μετατρέπει σε ψηφιακά αρχεία. Μπορείτε να δείτε το κείμενο αν επιλέξετε εμφάνιση πηγαίου μηνύματος (ή κάποια αντίστοιχη επιλογή στο πρόγραμμα ηλεκτρονικής αλληλογραφίας που χρησιμοποιείτε).[2]

Χρησιμοποιείται επίσης ευρέως στην αποθήκευση και μετάδοση πιστοποιητικών και δημόσιων κλειδιών[3][4]

Το κωδικοποιημένο σε base64 αντικείμενο συνήθως περιλαμβάνεται ανάμεσα σε δύο γραμμές που διευκρινίζουν τη χρήση του.[5]

Μετατροπή σε Base64

Στοιχειώδης πίνακας αντιστοίχισης Base64:[6]

ΤιμήΧαρακτήρας   ΤιμήΧαρακτήρας   ΤιμήΧαρακτήρας   ΤιμήΧαρακτήρας
0A16Q32g48w
1B17R33h49x
2C18S34i50y
3D19T35j51z
4E20U36k520
5F21V37l531
6G22W38m542
7H23X39n553
8I24Y40o564
9J25Z41p575
10K26a42q586
11L27b43r597
12M28c44s608
13N29d45t619
14O30e46u62+
15P31f47v63/


Για πρακτικούς λόγους η μετατροπή γίνεται πάντα με μετατροπή ομάδων τριών συνεχόμενων μπάιτ σε 4 «ψηφία» του συστήματος base64. Έτσι η μετατροπή ενός αρχείου τριών μπάιτ π.χ. 0x3e, 0x0b, 0x70 γίνεται παίρνοντας τα δυαδικά ψηφία των τριών μπάιτ σε ομάδες των 6 δυαδικών ψηφίων, που θα μας δώσουν 4 δυαδικούς αριθμούς, τους οποίους θα χρησιμοποιήσουμε σαν δείκτες για να βρούμε τα κωδικοποιημένα «ψηφία»:

Μπάιτ (δεκαδική τιμή) 3e16 (6210) 0b16 (1110) 7016 (11210)
δυαδικά ψηφία 001111100000101101110000
Δείκτης 15 (0011112) 32 (1000002) 45 (1011012) 48 (1100002)
Αντιστοίχιση P g t w

Επομένως το κωδικοποιημένο πλέον κείμενο είναι το: Pgtw

Όπως είναι προφανές επιλέγοντας ομάδες των τριών μπάιτ στο τέλος μπορεί να περισσέψουν ένα ή δύο (ή κανένα) μπάιτ. Τότε υποδεικνύουμε αυτό το υπόλοιπο χρησιμοποιώντας τον χαρακτήρα = (ίσον) στο τελικό κωδικοποιημένο κείμενο. Αν στο τέλος έχει μείνει μόνο ένα μπάιτ προσθέτουμε στο κωδικωποιημένο κείμενο 2 ίσον (==) ενώ αν έχουν μείνει δύο προσθέτουμε (πάντα στο κωδικοποιήμενο ήδη κείμενο) ένα ίσον.

Αν το προηγούμενο αρχείο αποτελούνταν από 4 μπάιτ π.χ. 0x3e, 0x0b, 0x70, 0x2d

Μπάιτ (στο δεκαδικό) 3e16 (6210) 0b16 (1110) 7016 (11210) 2d16 (4510)
δυαδικά ψηφία 001111100000101101110000001011010000000000000000
Δείκτης 15 (0011112) 32 (1000002) 45 (1011012) 48 (1100002) 11 (0010112) 16 (0100002)
Αντιστοίχιση P g t w L Q

Επομένως η κωδικοποίηση μας δίνει: PgtwLQ

Για να υποδείξουμε στον αποκωδικοποιητή ότι στο τέλος δεν υπήρχε τριάδα, αλλά μόνο ένα μπάιτ, προσθέτουμε δύο ίσον (==) δημιουργώντας έτσι το κωδικοποιημένο κείμενο: PgtwLQ==.

Διαφορές στην υλοποίηση

ΠαραλλαγήΧαρακτήρας 62Χαρακτήρας 63συμπληρωματικός χαρακτήραςΣταθερό μήκος γραμμήςΜέγιστο μήκος γραμμήςΔιαχωριστικά γραμμήςΧαρακτήρες εκτός πίνακα αντιστοίχισηςάθροισμα ελέγχου
RFC 1421 (παρωχημένο) +/= (υποχρεωτικό)Ναι (πλην της τελευταίας)64CR+LFΑπαγορεύονταιΚανένα
RFC 2045 +/= (υποχρεωτικό)Όχι (μεταβλητό)76CR+LFΕπιτρέπονται (αλλά αγνοούνται)Κανένα
RFC 3548, RFC 4648 +/= (υποχρεωτικό, εκτός αν ορίζεται αλλιώς στο αναφερόμενο έγγραφο)Όχι (εκτός αν ορίζεται αλλιώς στο αναφερόμενο έγγραφο)Όχι (εκτός αν ορίζεται αλλιώς στο αναφερόμενο έγγραφο)Κανένα (εκτός αν ορίζεται αλλιώς στο αναφερόμενο έγγραφο)Απαγορεύονται (εκτός αν ορίζεται αλλιώς στο αναφερόμενο έγγραφο)Κανένα
RFC 4880 +/= (υποχρεωτικό)Όχι (μεταβλητό)76CR+LFΑπαγορεύονται24-bit CRC
RFC 1642 (παρωχημένο) +/ΚανέναςΌχι (μεταβλητό)ΚανέναΚανέναΑπαγορεύονταιΚανένα
RFC 3501 +,ΚανέναςΌχι (μεταβλητό)ΚανέναΚανέναΑπαγορεύονταιΚανένα
RFC 4648, §5 'Table 2: The "URL and Filename safe" Base 64 Alphabet' -_Προαιρετικό = (προαιρετικό αν το μήκος των δεδομένων είναι γνωστό, αλλιώς κωδικοποιημένο σε μορφή αποδεκτή για URL)Όχι (μεταβλητό)εξαρτάται από την εφαρμογή που θα το χρησιμοποιήσειΚανέναΑπαγορεύονταιΚανένα
RFC 7515 -_ΚανέναςΌχι (μεταβλητό)εξαρτάται από την εφαρμογή που θα το χρησιμοποιήσειΚανέναΑπαγορεύονταιΚανένα

Παραπομπές

  1. «Κωδικοποίηση ή αποκωδικοποίηση σε base64 | Linux Inside». 23 Ιουλίου 2013. Ανακτήθηκε στις 20 Μαρτίου 2018.
  2. «When embedding base64 encoded images to Html content of Send Email component, recipient email client does not display image» (στα Αγγλικά). Ανακτήθηκε στις 20 Μαρτίου 2018.
  3. «DER vs. CRT vs. CER vs. PEM Certificates and How To Convert Them» (στα Αγγλικά). Αρχειοθετήθηκε από το πρωτότυπο στις 14 Ιουλίου 2017. Ανακτήθηκε στις 20 Μαρτίου 2018.
  4. «HTTP Public Key Pinning (HPKP)». MDN Web Docs (στα Αγγλικά). Ανακτήθηκε στις 20 Μαρτίου 2018.
  5. «IBM Knowledge Center - Base64-encoded certificates» (στα Αγγλικά). Ανακτήθηκε στις 20 Μαρτίου 2018.
  6. Tschabitscher, Heinz. «How 'Base64' Encoding Works (Email)». Lifewire (στα Αγγλικά). Ανακτήθηκε στις 20 Μαρτίου 2018.