ตัวเข้ารหัสและถอดรหัส Base58

ขั้นตอน 1 / 333%

ข้อมูลนำเข้า


            

Base58 คือการเข้ารหัสข้อมูลไบนารีเป็นข้อความที่ออกแบบมาเพื่อหลีกเลี่ยงอักขระหลายตัวที่สับสนกันได้ง่าย ชุดอักขระ Bitcoin ไม่ใช้ 0 O I l และ + / ส่วนระบบอื่นจัดเรียงสัญลักษณ์ 58 ตัวเดียวกันในลำดับที่ต่างกัน ตัวอย่างที่คุ้นเคยคือที่อยู่ Bitcoin แบบเก่าที่ใช้ Base58Check และสตริง IPFS CIDv0 เครื่องมือนี้ทำงานในเบราว์เซอร์เท่านั้น แปลงข้อความ UTF-8 หรือไบต์เลขฐานสิบหกอย่างแม่นยำด้วยชุดอักขระ Bitcoin, Ripple หรือ Flickr และปฏิเสธอักขระที่ไม่อยู่ในชุดที่เลือก

วิธีเข้ารหัสและถอดรหัส Base58

  1. 1

    ใส่ไบต์หรือสตริง Base58

    ทิศทางเข้ารหัสรับเลขฐานสิบหกหรือข้อความดิบ ส่วนทิศทางถอดรหัสรับ Base58

  2. 2

    เลือกชุดอักขระหากจำเป็น

    ค่าเริ่มต้นคือ Base58 ของ Bitcoin และมีแบบ Ripple กับ Flickr ให้เลือกเพื่อความเข้ากันได้

  3. 3

    เรียกใช้การแปลง

    Base58 ไม่ได้แบ่งเป็นกลุ่ม 5 หรือ 6 บิตอย่างเป็นระเบียบ แต่ถูกมองเป็นจำนวนเต็มแบบบิ๊กเอนเดียนตัวเดียว แล้วหารด้วย 58 ซ้ำ ๆ

  4. 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 ได้