ตัวเข้ารหัสและถอดรหัส Base58
ข้อมูลนำเข้า
Base58 คือการเข้ารหัสข้อมูลไบนารีเป็นข้อความที่ออกแบบมาเพื่อหลีกเลี่ยงอักขระหลายตัวที่สับสนกันได้ง่าย ชุดอักขระ Bitcoin ไม่ใช้ 0 O I l และ + / ส่วนระบบอื่นจัดเรียงสัญลักษณ์ 58 ตัวเดียวกันในลำดับที่ต่างกัน ตัวอย่างที่คุ้นเคยคือที่อยู่ Bitcoin แบบเก่าที่ใช้ Base58Check และสตริง IPFS CIDv0 เครื่องมือนี้ทำงานในเบราว์เซอร์เท่านั้น แปลงข้อความ UTF-8 หรือไบต์เลขฐานสิบหกอย่างแม่นยำด้วยชุดอักขระ Bitcoin, Ripple หรือ Flickr และปฏิเสธอักขระที่ไม่อยู่ในชุดที่เลือก
วิธีเข้ารหัสและถอดรหัส Base58
-
1
ใส่ไบต์หรือสตริง Base58
ทิศทางเข้ารหัสรับเลขฐานสิบหกหรือข้อความดิบ ส่วนทิศทางถอดรหัสรับ Base58
-
2
เลือกชุดอักขระหากจำเป็น
ค่าเริ่มต้นคือ Base58 ของ Bitcoin และมีแบบ Ripple กับ Flickr ให้เลือกเพื่อความเข้ากันได้
-
3
เรียกใช้การแปลง
Base58 ไม่ได้แบ่งเป็นกลุ่ม 5 หรือ 6 บิตอย่างเป็นระเบียบ แต่ถูกมองเป็นจำนวนเต็มแบบบิ๊กเอนเดียนตัวเดียว แล้วหารด้วย 58 ซ้ำ ๆ
-
4
คัดลอกผลลัพธ์
สตริงที่เข้ารหัสจะคงไบต์ศูนย์ที่นำหน้าไว้เป็นอักขระ `1` ที่นำหน้า (อักขระแทนศูนย์ในชุดอักขระ Bitcoin)
ชุดอักขระ Base58 ของ Bitcoin
123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz
สังเกตสิ่งที่หายไป: 0, O, I, l อักขระตัวแรกในชุดคือ 1 ซึ่งแทนจำนวนเต็ม 0
มันทำงานจริงอย่างไร
ต่างจาก Base64 ที่แบ่งบิตเป็นกลุ่มขนาดคงที่ Base58 มองสายไบต์ทั้งหมดเป็นจำนวนเต็มแบบบิ๊กเอนเดียนตัวเดียว N แล้วเขียนในฐาน 58:
result = []
while N > 0:
result.prepend(alphabet[N mod 58])
N = N / 58
for each leading zero byte in input:
result.prepend(alphabet[0]) # i.e. '1'
นี่คือเหตุผลที่การเข้ารหัส Base58 ทำแบบสตรีมไม่ได้ง่าย ๆ คุณต้องมีจำนวนเต็มทั้งหมดก่อนจึงจะส่งออกอักขระตัวใดได้
Base58 เทียบกับ Base58Check
เพย์โหลด Base58Check ทั่วไปของที่อยู่ P2PKH แบบเก่ามี 25 ไบต์ ได้แก่ ไบต์เวอร์ชัน 1 ไบต์ ไบต์แฮช 20 ไบต์ และไบต์เช็คซัม 4 ไบต์ เช็คซัมคือ 4 ไบต์แรกของค่า SHA-256 สองรอบจากเวอร์ชันและแฮช เมื่อนำเพย์โหลดทั้งหมดไปเข้ารหัส Base58 จะได้สตริงที่อยู่ที่คุ้นเคย
เครื่องมือนี้แปลงเฉพาะ Base58 แบบธรรมดา หากต้องการตรวจสอบเวอร์ชันและเช็คซัมของที่อยู่ ให้ใช้ตัวตรวจสอบ Base58Check โดยเฉพาะ
ชุดอักขระแบบต่าง ๆ
| แบบ | ใช้ที่ไหน | ต่างจาก Bitcoin อย่างไร |
|---|---|---|
| Bitcoin | ที่อยู่ BTC, IPFS CIDv0 | เกณฑ์อ้างอิง |
| Ripple | ที่อยู่ XRP | สลับตำแหน่งอักขระ |
| Flickr | URL รูปภาพแบบสั้น | วางตัวพิมพ์เล็กก่อนตัวพิมพ์ใหญ่ |
ทำไมไม่ใช้ Base64 เฉย ๆ?
Base64 มีการเปลี่ยนแปลงความยาวระหว่างไบนารีกับข้อความที่เข้ารหัสอย่างคงที่ (4 อักขระต่อ 3 ไบต์) ซึ่งมีประสิทธิภาพ ส่วน Base58 มีค่าใช้จ่ายเพิ่มที่แปรผันเล็กน้อย แต่ไม่มีอักขระที่กำกวม ซึ่งเป็นสิ่งที่คุณต้องการเมื่อมีคนต้องคัดลอกที่อยู่ด้วยมือหรืออ่านผ่านโทรศัพท์
คำถามที่พบบ่อย
ไม่ใช่เสมอไป Base58 ดีกว่าเมื่อมนุษย์เป็นผู้จัดการสตริง ส่วน Base64 ดีกว่าเมื่อเครื่องส่งข้อมูลไปมา Base64 เข้ารหัส 6 บิตต่ออักขระ เทียบกับ Base58 ที่ราว 5.86 บิต ดังนั้น Base64 จึงกระชับกว่าเล็กน้อย
Base58 เข้ารหัสจำนวนเต็มขนาดใหญ่ ความยาวจึงต่างกันได้หนึ่งหรือสองอักขระตามบิตลำดับสูง ที่อยู่ P2PKH ทั่วไปยาว 34 อักขระ แต่ 33 อักขระก็เป็นไปได้
เครื่องมือถอดรหัสสตริงเป็นไบต์ดิบได้ ให้เลือกผลลัพธ์แบบเลขฐานสิบหกเพื่อแสดงไบต์ทุกค่าโดยไม่สูญหาย เครื่องมือไม่ตรวจสอบเวอร์ชันหรือเช็คซัม ดังนั้นการถอดรหัสสำเร็จไม่ได้ยืนยันว่าที่อยู่ถูกต้อง ต้องใช้ตัวตรวจสอบ Base58Check สำหรับงานนั้น
ถูกต้อง ไบต์ศูนย์แต่ละตัวที่ต้นข้อมูลนำเข้าจะกลายเป็นอักขระ 1 ในผลลัพธ์ ซึ่งเป็นวิธีที่ที่อยู่ Bitcoin ที่ขึ้นต้นด้วย 1 ทำงาน
เครื่องมือที่เกี่ยวข้อง
ตัวเข้ารหัสและถอดรหัส Base85
เข้ารหัสและถอดรหัส Base85 ในรูปแบบ Adobe Ascii85 (PostScript/PDF) หรือ Z85 (ZeroMQ) กะทัดรัดกว่า Base64 สำหรับข้อมูลไบนารี
ตัวเข้ารหัสและถอดรหัส Base32
เข้ารหัสและถอดรหัสสตริง Base32 ด้วยตารางอักขระ RFC 4648 เหมาะสำหรับซีเคร็ต TOTP, โทเค็นที่ไม่แยกตัวพิมพ์ใหญ่เล็ก และตัวระบุที่มนุษย์ต้องพิมพ์
เครื่องมือเข้ารหัสซีซาร์
เข้ารหัสและถอดรหัสข้อความด้วยรหัสซีซาร์ เลื่อนได้ตั้งแต่ 1-25 รองรับ ROT13 เป็นกรณีพิเศษ และคงเครื่องหมายวรรคตอนกับตัวพิมพ์ใหญ่-เล็กไว้เหมือนเดิม
ตัวเข้ารหัส Atbash Cipher
เข้ารหัสหรือถอดรหัสข้อความด้วยรหัส Atbash ซึ่งเป็นการแทนที่แบบฮีบรูที่จับคู่ A-Z เป็น Z-A การทำงานเดียวกันใช้ได้ทั้งเข้ารหัสและถอดรหัส
เข้ารหัส / ถอดรหัส AES
เข้ารหัสและถอดรหัสข้อความความเสี่ยงต่ำด้วย AES cipher ของ OpenSSL passphrase จะถูก hash ด้วย SHA-256 และผลลัพธ์ Base64 มี IV รวมกับข้อความเข้ารหัส
ตัวสร้าง bcrypt
สร้าง bcrypt hash จากรหัสผ่าน plaintext ปรับ cost factor ได้ตั้งแต่ 4 ถึง 14 ใช้ร่วมกับ Laravel, Django, Node และ PHP ได้