Μετατροπέας Base32 / Base58

Κωδικοποίηση κειμένου ή αποκωδικοποίηση κωδικοποιημένων συμβολοσειρών σε επτά σχήματα: Base32 RFC 4648 (A-Z2-7), base32hex (0-9A-V), Crockford Base32, z-base-32, Base58 Bitcoin, Base58 Flickr και Base58 Ripple. Υπάρχει επίσης αυτόνομη γεννήτρια και επαληθευτής Base58Check (byte έκδοσης + άθροισμα ελέγχου SHA-256 διπλής εφαρμογής) κάτω από τον μετατροπέα. Το κείμενο αντιμετωπίζεται ως byte UTF-8. Επίσης: Base64 | Ascii85 | Κείμενο δεκαεξαδικό.
Όλη η επεξεργασία γίνεται τοπικά στο πρόγραμμα περιήγησης — τα δεδομένα δεν μεταφορτώνονται ποτέ σε διακομιστή.
Πώς λειτουργεί: Κάθε χαρακτήρας μετατρέπεται σε byte UTF-8, και στη συνέχεια κάθε σχήμα συσκευάζει αυτά τα byte στο δικό του εκτυπώσιμο αλφάβητο.
Σχήμα:
Πώς λειτουργεί: Η κωδικοποιημένη συμβολοσειρά αποκωδικοποιείται ξανά σε byte UTF-8 και εμφανίζεται ως κείμενο. Τα κενά και η συμπλήρωση = στο τέλος αγνοούνται· οι μη έγκυροι χαρακτήρες αναφέρονται με τη θέση τους.
Σχήμα:
Το Ctrl+Enter στην είσοδο εκτελεί την ενεργή λειτουργία.
Επιλογή Κωδικοποίηση ή Αποκωδικοποίηση, επιλογή σχήματος και εκτέλεση με το κουμπί της ενέργειας. Όλη η επεξεργασία μένει στο πρόγραμμα περιήγησης.

Κωδικοποιητής Base58Check: Byte έκδοσης (hex): Φορτίο (hex):
Επαληθευτής Base58Check: Διεύθυνση ή συμβολοσειρά:
Το Base58Check είναι η μορφή διεύθυνσης του Bitcoin: ένα byte έκδοσης, το ωφέλιμο φορτίο και στη συνέχεια τα πρώτα τέσσερα byte του SHA-256, εφαρμοσμένου δύο φορές στο byte έκδοσης και στο φορτίο μαζί. Η κωδικοποίηση γράφει αυτή τη συμβολοσειρά· η επαλήθευση τη διαβάζει και δείχνει ποιο byte είναι λάθος όταν δεν ταιριάζει το άθροισμα ελέγχου.
Για κάθε σχήμα:
Base32 (RFC 4648) — το κλασικό αλφάβητο χωρίς διάκριση πεζών και κεφαλαίων A-Z 2-7· 8 byte γίνονται 13 χαρακτήρες συν συμπλήρωση. Ευρέως χρησιμοποιούμενο για μυστικά HOTP/TOTP, DNSSEC και αθροίσματα ελέγχου αρχείων. Προστίθεται προαιρετική συμπλήρωση =, εκτός αν απενεργοποιηθεί.
Base32 Hex — το εκτεταμένο αλφάβητο 0-9 A-V που ταξινομείται φυσικά λεξικογραφικά και είναι βολικό όταν η κωδικοποιημένη τιμή χρησιμοποιείται και ως αναγνωριστικό τύπου hex.
Base58 (Bitcoin) — Base64 χωρίς τους χαρακτήρες 0 O I l + /, ώστε η έξοδος να μην περιέχει ποτέ διφορούμενους χαρακτήρες. Είναι το αλφάβητο των διευθύνσεων Bitcoin. Τα αρχικά μηδενικά byte γίνονται το ψηφίο 1.
Base58 (Flickr) — το αλφάβητο των σύντομων URL του Flickr, με διάκριση πεζών και κεφαλαίων σε αντίθετη σειρά: ψηφία, πεζά, κεφαλαία.
Crockford Base32 — τα ψηφία και τα μη διφορούμενα γράμματα 0-9 A-Z χωρίς τα I, L, O και U. Η αποκωδικοποίηση δέχεται επίσης το I και το L ως 1, το O ως 0, πεζά, και τις παύλες ως διακόσμηση. Μπορεί να προστεθεί προαιρετικό σύμβολο ελέγχου modulo 37.
z-base-32 — οι ίδιες ομάδες πέντε bit με το RFC 4648 Base32, με το αλφάβητο αναδιατεταγμένο ώστε οι χαρακτήρες που πληκτρολογούνται συχνότερα να είναι οι πιο εύκολοι στη γραφή. Χωρίς συμπλήρωση και χωρίς σύμβολο ελέγχου.
Base58 (Ripple / XRP) — τρίτη διάταξη των ίδιων 58 χαρακτήρων, που χρησιμοποιείται από το XRP Ledger. Ο πρώτος χαρακτήρας της είναι το r, γι' αυτό οι διευθύνσεις Ripple αρχίζουν με αυτό το γράμμα.
Base58Check — συμβολοσειρά Base58 της οποίας το φορτίο φέρει τέσσερα byte αθροίσματος ελέγχου, ώστε μια λανθασμένα πληκτρολογημένη διεύθυνση να μπορεί να απορριφθεί αντί να στέλνει σιωπηλά κεφάλαια αλλού. Υπάρχει αυτόνομη γεννήτρια και επαληθευτής κάτω από τον μετατροπέα.
Τι είναι τα 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, επειδή το μυστικό πρέπει να πληκτρολογηθεί με το χέρι. Χρησιμοποιείται όποιο ζητά το λογισμικό παραλαβής και η ίδια η κωδικοποίηση δεν θεωρείται ποτέ εγγύηση μυστικότητας.