Εάν το διαδίκτυο είναι ο αυτοκινητόδρομος πληροφοριών, τότε η διαδρομή για το ηλεκτρονικό ταχυδρομείο είναι μια στενή ρεματιά. Μόνο πολύ μικρά καροτσάκια μπορούν να περάσουν.
Το σύστημα μεταφοράς ηλεκτρονικού ταχυδρομείου έχει σχεδιαστεί μόνο για απλό κείμενο ASCII. Προσπαθώντας να στείλετε κείμενο σε άλλες γλώσσες ή αυθαίρετα αρχεία είναι σαν να πετάξετε ένα φορτηγό μέσα από τη χαράδρα.
Πώς περνάει το μεγάλο φορτηγό μέσα από το ρέμα;
Τότε πώς στέλνετε ένα μεγάλο φορτηγό μέσα από μια μικρή ρεματιά; Πρέπει να το παίρνετε κομμάτια στο ένα άκρο, να μεταφέρετε τα κομμάτια μέσα από τη χαράδρα και να ανοικοδομήσετε το φορτηγό από τα κομμάτια στο άλλο άκρο.
Το ίδιο συμβαίνει όταν στέλνετε ένα συνημμένο αρχείο μέσω ηλεκτρονικού ταχυδρομείου. Σε μια διαδικασία που είναι γνωστή ως κωδικοποίηση των δυαδικών δεδομένων, μετατρέπεται σε κείμενο ASCII, το οποίο μπορεί να μεταφερθεί στο ηλεκτρονικό ταχυδρομείο χωρίς προβλήματα. Στο τέλος του παραλήπτη, τα δεδομένα αποκωδικοποιούνται και το αρχικό αρχείο ανοικοδομείται.
Μία μέθοδος κωδικοποίησης αυθαίρετων δεδομένων ως απλού ASCII κειμένου είναι το Base64. Είναι μία από τις τεχνικές που χρησιμοποιεί το πρότυπο MIME για την αποστολή δεδομένων πέραν του απλού κειμένου.
Base64 στη διάσωση
Η κωδικοποίηση Base64 διαρκεί τρία byte, ο καθένας από τα οποία αποτελείται από οκτώ bits, και τα αντιπροσωπεύει ως τέσσερις εκτυπώσιμους χαρακτήρες στο πρότυπο ASCII. Το κάνει αυτό ουσιαστικά σε δύο βήματα.
Το πρώτο βήμα είναι να μετατρέψετε τρία byte σε τέσσερις αριθμούς έξι bits. Κάθε χαρακτήρας στο πρότυπο ASCII αποτελείται από επτά bits. Το Base64 χρησιμοποιεί μόνο 6 bits (αντιστοιχεί σε 2 ^ 6 = 64 χαρακτήρες) για να διασφαλίσει ότι τα κωδικοποιημένα δεδομένα είναι εκτυπώσιμα και μπορούν να διαβαστούν από άνθρωπο. Δεν χρησιμοποιείται κανένας από τους ειδικούς χαρακτήρες που είναι διαθέσιμοι στο ASCII.
Οι 64 χαρακτήρες (εξ ου και το όνομα Base64) είναι 10 ψηφία, 26 πεζά χαρακτήρες, 26 κεφαλαίοι χαρακτήρες καθώς και '+' και '/'.
Εάν, για παράδειγμα, τα τρία byte είναι 155, 162 και 233, το αντίστοιχο (και τρομακτικό) ρεύμα δυαδικών ψηφίων είναι 100110111010001011101001, το οποίο με τη σειρά του αντιστοιχεί στις τιμές των 6-bit 38, 58, 11 και 41.
Αυτοί οι αριθμοί μετατρέπονται σε χαρακτήρες ASCII στο δεύτερο βήμα χρησιμοποιώντας τον πίνακα κωδικοποίησης Base64. Οι τιμές 6-bit του παραδείγματος μας μεταφράζονται στην ακολουθία ASCII "m6Lp".
- 155 -> 10011011
- 162 -> 10100010
- 233 -> 11101001
- 100110 -> 38
- 111010 -> 58
- 001011 -> 11
- 101001 -> 41
- 38 -> m
- 58 -> 6
- 11 -> L
- 41 -> σελ
Αυτή η διαδικασία δύο σταδίων εφαρμόζεται σε ολόκληρη την ακολουθία των ψηφιολέξεων που κωδικοποιούνται. Για να διασφαλιστεί ότι τα κωδικοποιημένα δεδομένα μπορούν να εκτυπωθούν σωστά και δεν υπερβαίνει το όριο μήκους γραμμής του διακομιστή αλληλογραφίας, εισάγονται χαρακτήρες γραμμής νέας γραμμής για να διατηρούνται τα μήκη γραμμών κάτω από 76 χαρακτήρες. Οι χαρακτήρες νέας γραμμής κωδικοποιούνται όπως όλα τα άλλα δεδομένα.
Επίλυση του Endgame
Στο τέλος της διαδικασίας κωδικοποίησης, ενδέχεται να αντιμετωπίσουμε πρόβλημα. Αν το μέγεθος των αρχικών δεδομένων σε bytes είναι πολλαπλάσιο των τριών, όλα λειτουργούν καλά. Αν δεν συμβαίνει, ίσως καταλήξουμε σε ένα ή δύο byte 8-bit. Για την σωστή κωδικοποίηση χρειάζονται ακριβώς τρία bytes, ωστόσο.
Η λύση είναι να προσαρτήσετε αρκετά byte με τιμή «0» για να δημιουργήσετε μια ομάδα 3 byte. Δύο τέτοιες τιμές επισυνάπτονται εάν έχουμε ένα επιπλέον byte δεδομένων, το ένα προσαρτάται για δύο επιπλέον byte.
Φυσικά, αυτά τα τεχνητά τελικά '0 δεν μπορούν να κωδικοποιηθούν χρησιμοποιώντας τον παρακάτω πίνακα κωδικοποίησης. Πρέπει να αντιπροσωπεύονται από ένα 65ο χαρακτήρα.
Ο χαρακτήρας βάσης Base64 είναι '='. Φυσικά, μπορεί να εμφανιστεί μόνο στο τέλος των κωδικοποιημένων δεδομένων.
Πίνακας κωδικοποίησης Base64
αξία | Απανθρακώνω | αξία | Απανθρακώνω | αξία | Απανθρακώνω | αξία | Απανθρακώνω | |||
---|---|---|---|---|---|---|---|---|---|---|
0 | ΕΝΑ | 16 | Q | 32 | σολ | 48 | w | |||
1 | σι | 17 | R | 33 | h | 49 | Χ | |||
2 | ντο | 18 | μικρό | 34 | Εγώ | 50 | y | |||
3 | ρε | 19 | Τ | 35 | j | 51 | z | |||
4 | μι | 20 | U | 36 | κ | 52 | 0 | |||
5 | φά | 21 | V | 37 | μεγάλο | 53 | 1 | |||
6 | σολ | 22 | W | 38 | m | 54 | 2 | |||
7 | H | 23 | Χ | 39 | n | 55 | 3 | |||
8 | Εγώ | 24 | Y | 40 | o | 56 | 4 | |||
9 | J | 25 | Ζ | 41 | Π | 57 | 5 | |||
10 | κ | 26 | ένα | 42 | q | 58 | 6 | |||
11 | μεγάλο | 27 | σι | 43 | r | 59 | 7 | |||
12 | Μ | 28 | ντο | 44 | μικρό | 60 | 8 | |||
13 | Ν | 29 | ρε | 45 | t | 61 | 9 | |||
14 | Ο | 30 | μι | 46 | u | 62 | + | |||
15 | Π | 31 | φά | 47 | v | 63 | / |