Κωδικοποίηση/Αποκωδικοποίηση Base64
Πληκτρολογήστε ή επικολλήστε κείμενο, μετά κωδικοποιήστε ή αποκωδικοποιήστε. Το Unicode και τα emoji δουλεύουν σωστά — τίποτα από όσα εισάγετε δεν φεύγει από το πρόγραμμα περιήγησής σας.
Base64 σωστό ως προς το Unicode, όχι μόνο ASCII
Το Base64 κωδικοποιεί bytes, όχι χαρακτήρες, οπότε το πρώτο
βήμα για το κείμενο είναι να μετατραπεί η συμβολοσειρά σας σε
bytes — και ακριβώς εκεί χαλάνε οι αφελείς υλοποιήσεις. Αυτό το
εργαλείο μετατρέπει το κείμενό σας στη σωστή ακολουθία bytes
UTF-8 με το TextEncoder πρώτα, μετά κωδικοποιεί σε
Base64 αυτά τα bytes, και αντιστρέφει τη διαδικασία με το TextDecoder στην επιστροφή:
function toBase64(str) {
return btoa(String.fromCharCode(...new TextEncoder().encode(str)));
}
function fromBase64(b64) {
return new TextDecoder().decode(Uint8Array.from(atob(b64), c => c.charCodeAt(0)));
}
Η συνηθισμένη συντόμευση, μια απλή btoa(κείμενο),
υποθέτει ένα byte ανά χαρακτήρα (Latin-1) και χαλάει μόλις
πληκτρολογήσετε έναν τονισμένο ελληνικό χαρακτήρα ή ένα emoji —
αυτό το εργαλείο δεν έχει αυτό το πρόβλημα, γιατί ποτέ δεν
δίνει ακατέργαστους χαρακτήρες απευθείας στην btoa.
Πρακτικό παράδειγμα
Η κωδικοποίηση της φράσης καλημέρα 😀 (ένας τόνος
και ένα emoji μαζί) παράγει ακριβώς:
zrrOsc67zrfOvM6tz4HOsSDwn5iA
Η αποκωδικοποίηση αυτής της συμβολοσειράς επιστρέφει καλημέρα 😀 ακριβώς — κάθε χαρακτήρας ανέπαφος,
τόνος συμπεριλαμβανομένου. Περάστε την ίδια είσοδο απευθείας
από μια γυμνή btoa() και θα πετάξει σφάλμα, επειδή
το 😀 βρίσκεται εκτός Latin-1.
Συχνές ερωτήσεις
Σε τι χρησιμεύει πραγματικά το Base64;
Το Base64 μετατρέπει αυθαίρετα bytes σε μια συμβολοσειρά φτιαγμένη μόνο από γράμματα, ψηφία, +, / και = — ένα αλφάβητο ασφαλές να μπει οπουδήποτε αναμένεται απλό κείμενο. Αυτό έχει σημασία γιατί πολλές μορφές δεν αντέχουν ακατέργαστο δυαδικό περιεχόμενο χωρίς να χαλάσουν: τα συνημμένα email (το MIME τα κωδικοποιεί σε Base64), τα data URI (ενσωμάτωση μιας μικρής εικόνας απευθείας μέσα σε CSS ή HTML ως data:image/png;base64,...), και τα πεδία JSON ή XML που πρέπει να μεταφέρουν κάτι δυαδικό χωρίς να σπάσουν τη γύρω σύνταξη.
Γιατί τα emoji και οι τονισμένοι χαρακτήρες χαλάνε ορισμένα εργαλεία Base64;
Η γυμνή btoa() της JavaScript υποθέτει ότι κάθε χαρακτήρας χωράει σε ένα μόνο byte (0–255) και πετάει σφάλμα ή αλλοιώνει οτιδήποτε βρίσκεται εκτός αυτού του εύρους — έτσι ένα «ά» με τόνο ή ένα emoji βγαίνουν λάθος. Αυτό το εργαλείο κωδικοποιεί πρώτα με το TextEncoder, που μετατρέπει το κείμενό σας στη σωστή ακολουθία bytes UTF-8, και μετά κάνει Base64 σε αυτά τα bytes αντί για τους ακατέργαστους χαρακτήρες· το TextDecoder αντιστρέφει τη διαδικασία στην επιστροφή. Γι' αυτό η «καλημέρα» ή ένα emoji κωδικοποιούνται και αποκωδικοποιούνται σωστά εδώ, σε αντίθεση με μια απευθείας btoa(κείμενο).
Είναι το Base64 κρυπτογράφηση ή μέτρο ασφαλείας;
Όχι — αυτό αξίζει να το ξέρετε. Το Base64 είναι κωδικοποίηση, όχι κρυπτογράφηση: δεν έχει κλειδί ούτε μυστικό, και οποιοσδήποτε μπορεί να το αποκωδικοποιήσει ακαριαία με οποιοδήποτε online εργαλείο ή μία γραμμή κώδικα. Αν δείτε διαπιστευτήρια ή tokens «προστατευμένα» με Base64, δεν είναι καθόλου προστατευμένα — αντιμετωπίστε το αποκλειστικά ως μορφή ασφαλή για τη μεταφορά κειμένου, ποτέ ως τρόπο απόκρυψης ή προστασίας πληροφορίας.
Μπορώ να κωδικοποιήσω αρχεία με αυτό το εργαλείο;
Προς το παρόν όχι — αυτό το εργαλείο δουλεύει με κείμενο που πληκτρολογείτε ή επικολλάτε, όχι με ανεβασμένα αρχεία. Η κωδικοποίηση των ακατέργαστων bytes ενός αρχείου σε Base64 (όπως κάνουν τα προγράμματα περιήγησης εσωτερικά για τα data URI) είναι μια συναφής αλλά διαφορετική εργασία που αυτό το εργαλείο δεν εκτελεί.