Επιλογή Κωδικοποίηση ή Αποκωδικοποίηση, επιλογή σχήματος και εκτέλεση με το κουμπί της ενέργειας. Όλη η επεξεργασία μένει στο πρόγραμμα περιήγησης.
Τι είναι τα Base32 και Base58;
Είναι δύο απαντήσεις στο ίδιο ερώτημα: ένα κανάλι που μεταφέρει κείμενο καλείται να μεταφέρει byte. Το Base32 και το Base58 δεν είναι κρυπτογράφηση και δεν είναι κατακερματισμός — δεν κρύβουν τίποτα και δεν συντομεύουν τίποτα. Ξαναγράφουν μια ακολουθία byte με ένα σταθερό σύνολο αναγνώσιμων χαρακτήρων, και όποιος γνωρίζει ποιο σύνολο χρησιμοποιήθηκε μπορεί να την αντιστρέψει αμέσως. Ο μόνος λόγος να προτιμηθεί το ένα από το άλλο είναι το τι κάνει ο παραλήπτης με τους χαρακτήρες.
Δύο οικογένειες κάνουν αυτή την αναγραφή με εντελώς διαφορετικούς τρόπους, και η διαφορά εξηγεί σχεδόν κάθε έκπληξη σε αυτή τη σελίδα:
- Συσκευασία bit — Base32, Base32 Hex, Crockford Base32, z-base-32. Τα byte κόβονται σε σταθερές ομάδες και κάθε πέντε bit γίνονται ένας χαρακτήρας. Το μήκος της εξόδου είναι προβλέψιμο από το μήκος της εισόδου, και η τελευταία, μερικώς γεμάτη ομάδα είτε σημειώνεται με χαρακτήρες συμπλήρωσης είτε μένει σύντομη.
- Μετατροπή μεγάλου αριθμού — κάθε πίνακας Base58. Ολόκληρη η ακολουθία byte διαβάζεται ως ένας τεράστιος αριθμός στη βάση 256 και γράφεται ξανά στη βάση 58. Δεν υπάρχουν ομάδες και συμπλήρωση· το μήκος δεν διαιρείται σε τίποτα, και κάθε αρχικό μηδενικό byte γίνεται ένα αρχικό μηδενικό σύμβολο.
Πού πηγαίνουν τα έξι bit δεδομένων: το Base32 χρησιμοποιεί πέντε bit ανά χαρακτήρα, οπότε χρειάζεται οκτώ χαρακτήρες για κάθε πέντε byte εισόδου — περίπου 60% μεγαλύτερο. Το Base58 χρησιμοποιεί περίπου 5,86 bit ανά χαρακτήρα, οπότε καταλήγει κοντά στο 37% μεγαλύτερο. Το Base64 χωράει έξι bit ανά χαρακτήρα και καταλήγει στο 33%. Τα μεγαλύτερα αλφάβητα είναι συντομότερα και δυσκολότερα να διαβαστούν φωναχτά, και αυτό ακριβώς είναι το αντάλλαγμα που κάνει το καθένα.
Τα επτά αλφάβητα αυτής της σελίδας
Κάθε αλφάβητο εκτυπώνεται πλήρως αντί να περιγράφεται, επειδή δύο εργαλεία που εκτυπώνουν διαφορετικούς χαρακτήρες με το ίδιο όνομα δεν θα συμφωνούν μεταξύ τους όσο κι αν λέει η ετικέτα. Οι γραμμές RFC 4648 είναι κανονιστικές· οι γραμμές Crockford και z-base-32 ακολουθούν ό,τι δημοσίευσε ο δημιουργός της μορφής· οι τρεις γραμμές Base58 είναι ευρέως διαδεδομένες συμβάσεις και όχι πρότυπα, γι' αυτό αναφέρονται χωριστά.
Crockford Base32 και το σύμβολο ελέγχου modulo 37
Το αλφάβητο αφαιρεί τα I, L, O και U, ώστε κανένα σύμβολο να μη διαβάζεται ως άλλο. Ό,τι μένει δεν διακρίνει κεφαλαία και πεζά κατά την είσοδο: το i και το l διαβάζονται ως ψηφίο 1, το o ως ψηφίο 0, και οι παύλες υπάρχουν μόνο για να διευκολύνουν την ανάγνωση ενός μακρού αλφαριθμητικού. Επιπλέον, η μορφή ορίζει προαιρετικό σύμβολο ελέγχου, που είναι η τιμή της συμβολοσειράς των συμβόλων διαβασμένη ως αριθμός βάσης 32, modulo 37, γραμμένη με πέντε επιπλέον σύμβολα για τις τιμές 32 έως 36.
Το σύμβολο ελέγχου υπολογίζεται πάνω στη συμβολοσειρά των συμβόλων, όχι στα byte: επειδή ο κωδικοποιητής συμπληρώνει με μηδενικά την τελευταία ομάδα, η αποκωδικοποίηση των ίδιων χαρακτήρων επιστρέφει πάντα στην ίδια τιμή. Γι' αυτό η τιμή ελέγχου του πίνακα μπορεί να αναπαραχθεί με το χέρι μόνο από τη στήλη κωδικοποίησης. Τα πέντε επιπλέον σύμβολα είναι τα *, ~, $, = και U για τις τιμές 32, 33, 34, 35 και 36, οπότε ένα σύμβολο ελέγχου δεν είναι πάντα ψηφίο ή γράμμα.
z-base-32
Το z-base-32 διατηρεί τη συσκευασία πέντε bit του RFC 4648 Base32 και αλλάζει μόνο τη σειρά των τριάντα δύο χαρακτήρων. Η σειρά επιλέγεται ώστε οι χαρακτήρες που είναι πιθανότερο να γράψει κάποιος με το χέρι να είναι οι πιο εύκολοι στη γραφή και οι λιγότερο συγχεόμενοι. Δεν έχει συμπλήρωση, οπότε ο αναγνώστης πρέπει να γνωρίζει πόσα σύμβολα αναμένεται να έχει μια τιμή· αυτό είναι το τίμημα μιας μορφής που σχεδιάστηκε για να διαβάζεται πρώτα με το χέρι.
Base58Check: ένα byte έκδοσης, το φορτίο, τέσσερα byte αθροίσματος ελέγχου
Το Base58 από μόνο του δεν έχει τρόπο να ξεχωρίσει μια λανθασμένα πληκτρολογημένη συμβολοσειρά από μια σωστή, επειδή σχεδόν οποιοσδήποτε συνδυασμός των πενήντα οκτώ χαρακτήρων του είναι έγκυρος αριθμός. Το Base58Check το διορθώνει τοποθετώντας τα δεδομένα μέσα σε περιτύλιγμα: ένα byte έκδοσης, μετά το φορτίο, και μετά τα πρώτα τέσσερα byte του SHA-256 εφαρμοσμένου δύο φορές στα δύο πρώτα μέρη. Ένα πρόγραμμα παραλήπτη υπολογίζει ξανά αυτά τα τέσσερα byte και απορρίπτει τη συμβολοσειρά όταν διαφέρουν. Το byte έκδοσης είναι αυτό που λέει σε ένα πορτοφόλι αν βλέπει διεύθυνση πληρωμής, διεύθυνση σεναρίου ή ιδιωτικό κλειδί.
Η γεννήτρια που βρίσκεται κάτω από τον μετατροπέα παίρνει τον byte έκδοσης και το φορτίο ως δεκαεξαδικά και γράφει τη συμβολοσειρά Base58Check· ο επαληθευτής τη διαβάζει, αποκόπτει τα τέσσερα byte αθροίσματος ελέγχου, τα υπολογίζει ξανά και αναφέρει και αυτά που βρήκε και αυτά που περίμενε. Λάθος άθροισμα ελέγχου σημαίνει ότι η συμβολοσειρά πληκτρολογήθηκε λάθος ή αλλοιώθηκε — ποτέ δεν σημαίνει ότι το ίδιο το φορτίο είναι λάθος, αφού το φορτίο δεν ερμηνεύεται ποτέ.
Συνηθισμένες παρανοήσεις
- "Το Base64 είναι κρυπτογράφηση." Όχι. Δεν υπάρχει κλειδί και κανένα μυστικό· το αποτέλεσμα αντιστρέφεται από οποιονδήποτε. Το Base32 και το Base58 βρίσκονται στην ίδια θέση, και η διέλευση μιας τιμής και από τα τρία δεν προσθέτει προστασία.
- "Μια συμβολοσειρά Base58 είναι διεύθυνση Bitcoin." Μόνο όταν περνά και τον έλεγχο Base58Check και φέρει byte έκδοσης που αναγνωρίζει το λογισμικό παραλαβής. Οι συμβολοσειρές Base58 εμφανίζονται σε πολλά άλλα σημεία, συμπεριλαμβανομένων απλών αναγνωριστικών χωρίς καθόλου άθροισμα ελέγχου.
- "Τα τρία αλφάβητα Base58 είναι εναλλάξιμα." Χρησιμοποιούν τους ίδιους πενήντα οκτώ χαρακτήρες σε τρεις διαφορετικές σειρές, οπότε τα ίδια byte παράγουν τρεις διαφορετικές συμβολοσειρές. Ένα εργαλείο πρέπει να ενημερωθεί ποιο να χρησιμοποιήσει, και αυτή η σελίδα πάντα δηλώνει ποιο χρησιμοποίησε.
- "Η συμπλήρωση αποτελεί μέρος της τιμής." Οι χαρακτήρες
= σημειώνουν μόνο την τελευταία ομάδα. Δύο συμβολοσειρές Base32 που διαφέρουν μόνο στη συμπλήρωσή τους περιγράφουν τα ίδια byte, γι' αυτό ο αποκωδικοποιητής δέχεται συμβολοσειρά με κομμένη συμπλήρωση.
- "Όλοι οι χαρακτήρες λειτουργούν." Κάθε αλφάβητο είναι ένα σταθερό σύνολο. Ένας χαρακτήρας έξω από αυτό δεν έχει τιμή, οπότε ο αποκωδικοποιητής σταματά και ονομάζει τον χαρακτήρα και τη θέση του αντί να μαντεύει.
Ερωτήσεις που προκύπτουν συχνά
Γιατί το Base32 χρησιμοποιεί τα 2-7 και όχι τα 0-9; Επειδή το RFC 4648 επέλεξε το αλφάβητο ώστε να μένει μέσα στους χαρακτήρες που μπορεί να περιέχει ένα όνομα τομέα και ώστε να διαβάζεται εύκολα φωναχτά. Το Base32 Hex χρησιμοποιεί αντί για αυτό τα 0-9 A-V όταν η φυσική ταξινόμηση έχει μεγαλύτερη σημασία.
Γιατί μια συμβολοσειρά Base58 αρχίζει τόσο συχνά με 1; Κάθε αρχικό μηδενικό byte της εισόδου γίνεται ένα αρχικό 1 (ο πρώτος χαρακτήρας των αλφαβήτων Bitcoin και Flickr). Ένα byte έκδοσης 0x00 είναι ένα μηδενικό byte, οπότε οι περισσότερες διευθύνσεις Bitcoin mainnet αρχίζουν με ακριβώς ένα 1.
Τι φορτώνει το κουμπί Δείγμα; Το παράδειγμα που ανήκει στο σχήμα και στην κατεύθυνση που εμφανίζεται κάθε φορά στην οθόνη, ποτέ ένα σταθερό κείμενο. Ο κωδικοποιητής δέχεται το κείμενο του δικού παραδείγματος του σχήματος — τα διανύσματα RFC 4648 ενότητα 10 για το Base32 και το Base32 Hex, το 12345 του Crockford, οι γραμμές z-base-32 που εκτυπώνονται παραπάνω — και ο αποκωδικοποιητής δέχεται τη κωδικοποιημένη συμβολοσειρά για το επιλεγμένο αλφάβητο, κάτι που κάνει το δείγμα χρήσιμο και προς τις δύο κατευθύνσεις. Οι τρεις γραμμές Base58 έχουν σκόπιμα το ίδιο κείμενο, οπότε η αλλαγή σχήματος και το νέο πάτημα του Δείγματος δείχνει τις τρεις διατάξεις των ίδιων πενήντα οκτώ χαρακτήρων δίπλα-δίπλα. Με επιλεγμένο το σύμβολο ελέγχου Crockford, ο αποκωδικοποιητής δέχεται την τιμή με το σύμβολο στο τέλος, που είναι ο μόνος τρόπος να παρακολουθήσει κανείς τον επαληθευτή να αποδέχεται ένα.
Στέλνει αυτή η σελίδα τα δεδομένα κάπου; Όχι. Κάθε μετατροπή γίνεται σε αυτή την καρτέλα του προγράμματος περιήγησης, και η σελίδα δεν περιέχει κλήσεις δικτύου οποιουδήποτε είδους. Γι' αυτό λειτουργεί ακόμη και με το αρχείο ανοιγμένο απευθείας από τον δίσκο.
Ποιο να χρησιμοποιηθεί για ένα μυστικό; Τα μυστικά των εφαρμογών ταυτοποίησης TOTP και HOTP είναι συνήθως Base32 στο αλφάβητο RFC 4648, επειδή το μυστικό πρέπει να πληκτρολογηθεί με το χέρι. Χρησιμοποιείται όποιο ζητά το λογισμικό παραλαβής και η ίδια η κωδικοποίηση δεν θεωρείται ποτέ εγγύηση μυστικότητας.