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

แปลงข้อความ ไบต์เลขฐานสิบหก หรือไฟล์เป็น Base62 และแปลงกลับ เอาต์พุตมีเพียงตัวเลขและตัวอักษร จึงใช้ใน URL ชื่อไฟล์ และตัวระบุได้อย่างปลอดภัยโดยไม่ต้อง escape

ทำงานภายในเบราว์เซอร์ของคุณทั้งหมด ไม่มีการอัปโหลดข้อมูลใด ๆ

วิธีใช้งาน

  1. เลือก “เข้ารหัส” เพื่อแปลงข้อความเป็น Base62 หรือเลือก “ถอดรหัส” เพื่อแปลง Base62 กลับเป็นข้อความ
  2. เลือกลำดับใน “ชุดตัวอักษร” ให้ตรงกับระบบของคุณ: 0-9 A-Z a-z (ค่าเริ่มต้น) หรือ 0-9 a-z A-Z
  3. พิมพ์หรือวางอินพุต หรือคลิก “เปิดไฟล์” เพื่อเปิดไฟล์ขนาดเล็ก (ไม่เกินประมาณ 20 KB)
  4. กด “คัดลอก” เพื่อคัดลอกผลลัพธ์ หรือ “ดาวน์โหลด” เพื่อบันทึกเป็นไฟล์

Base62 คืออะไร

Base62 ใช้ตัวเลขสิบตัว ตัวอักษรพิมพ์ใหญ่ 26 ตัว และตัวอักษรพิมพ์เล็ก 26 ตัว นับเป็นชุดตัวอักษรที่ใหญ่ที่สุดที่ประกอบด้วยตัวอักษรและตัวเลขล้วน ผลลัพธ์จึงไม่ต้อง escape เมื่อใช้ใน URL ชื่อไฟล์ คีย์ของฐานข้อมูล หรือตัวระบุในโค้ด อักขระแต่ละตัวบรรจุข้อมูลประมาณ 5.95 บิต ทำให้เอาต์พุตมีขนาดประมาณ 1.34 เท่าของอินพุต ซึ่งกะทัดรัดเกือบเท่า Base64 แต่ไม่มี +, /, =, - หรือ _

เนื่องจาก 62 ไม่ใช่เลขยกกำลังของสอง เครื่องมือนี้จึงมองอินพุตทั้งหมดเป็นตัวเลขขนาดใหญ่ตัวเดียวแล้วแปลงเป็นฐาน 62 เช่นเดียวกับ Base58 และ Base36 ไบต์ศูนย์ที่นำหน้าแต่ละไบต์จะถูกเขียนเป็น 0 นำหน้า เพื่อให้คงอยู่เมื่อแปลงไปแล้วแปลงกลับ อินพุตจำกัดไว้ที่ประมาณ 20 KB เพราะการคำนวณจะช้าลงเมื่อข้อมูลมีขนาดใหญ่

Base62 ไม่มีมาตรฐานเดียว

Base62 ไม่มี RFC ต่างจาก Base64 และแต่ละการใช้งานก็ต่างกันในหลายจุดจนเอาต์พุตใช้ร่วมกันไม่ได้:

  • ลำดับของชุดตัวอักษร เครื่องมือนี้มีให้เลือก 0-9A-Za-z (ค่าเริ่มต้น) และ 0-9a-zA-Z ไลบรารีอื่นบางตัววางตัวอักษรไว้ก่อนตัวเลข
  • ศูนย์ที่นำหน้า บางการใช้งานเก็บ 0 หนึ่งตัวต่อไบต์ศูนย์ที่นำหน้าหนึ่งไบต์เหมือนเครื่องมือนี้ บางการใช้งานตัดทิ้ง และรูปแบบที่มีความยาวคงที่จะเติมผลลัพธ์จนครบความกว้างที่กำหนด
  • สิ่งที่ถูกเข้ารหัส ฟังก์ชัน Base62 จำนวนมากเข้ารหัสจำนวนเต็ม เช่น ID ในฐานข้อมูล แทนที่จะเข้ารหัสลำดับของไบต์ บางตัวก็แบ่งข้อมูลเป็นบล็อกขนาดคงที่

หากสตริงจากระบบอื่นถอดรหัสที่นี่แล้วได้ข้อมูลที่อ่านไม่ออก ให้ลองเปลี่ยนไปใช้ชุดตัวอักษรอีกแบบ หากยังไม่ได้ผล แสดงว่าระบบนั้นน่าจะใช้วิธีอื่น

Base62 ใช้ที่ไหนบ้าง

บริการย่อลิงก์จะแปลง ID ที่เพิ่มค่าอัตโนมัติเป็นรหัสสั้น ๆ โดย Base62 เพียงเจ็ดอักขระครอบคลุมค่าได้มากกว่า 3.5 ล้านล้านค่า ID ที่เรียงลำดับได้ เช่น KSUID ใช้ Base62 ความยาวคงที่ 27 อักขระ และบริการหลายแห่งใช้ Base62 สำหรับคีย์ API และโทเค็น เพราะดับเบิลคลิกครั้งเดียวก็เลือกได้ทั้งสตริงและวางได้ทุกที่ หากต้องการแปลงจำนวนเต็มเพียงค่าเดียว ให้ใช้ ตัวแปลงเลขฐาน หรือเขียนโค้ดไม่กี่บรรทัด:

// JavaScript: แปลงจำนวนเต็ม (BigInt) เป็น Base62
const A = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
function toBase62(n) {
  let s = '';
  do { s = A[Number(n % 62n)] + s; n /= 62n; } while (n > 0n);
  return s;
}
toBase62(123456789n);   // '8M0kX'

ข้อกำหนด

ชุดตัวอักษร0-9 A-Z a-z
ขนาดเอาต์พุตประมาณ 134% (แปลงแบบเลขจำนวนใหญ่)
แพดดิงไม่มี
มาตรฐานไม่มีมาตรฐานอย่างเป็นทางการ
แยกตัวพิมพ์เล็ก-ใหญ่ใช่

ตัวอย่าง

อินพุต (UTF-8)เอาต์พุต
Hello, World!1wJfrzvdbtXUOlUjUf
Base64.isNWxjrFq4r3rv
你好19PqtKE1t

คำถามที่พบบ่อย

Base62 ปลอดภัยสำหรับ URL หรือไม่
ปลอดภัย Base62 ใช้เฉพาะ A-Z, a-z และ 0-9 ซึ่งไม่ต้อง escape ใน URL เลย Base64URL ก็ปลอดภัยสำหรับ URL เช่นกัน แต่มีอักขระ - และ _ อยู่ด้วย
ทำไมสตริง Base62 ของฉันจึงถอดรหัสได้ข้อความที่ผิด

การใช้งาน Base62 แต่ละแบบใช้ลำดับชุดตัวอักษรและวิธีการต่างกัน ให้ลองสลับระหว่างชุดตัวอักษร 0-9A-Za-z และ 0-9a-zA-Z หากใช้ไม่ได้ทั้งคู่ สตริงนั้นน่าจะสร้างจากจำนวนเต็มหรือด้วยอัลกอริทึมอื่น

Base62 แยกตัวพิมพ์เล็ก-ใหญ่หรือไม่

แยก ตัวพิมพ์ใหญ่และตัวพิมพ์เล็กแทนค่าที่ต่างกัน จึงไม่ควรแปลงสตริง Base62 เป็นตัวพิมพ์ใหญ่หรือตัวพิมพ์เล็กเด็ดขาด

ควรใช้ Base62 หรือ Base58
Base58 ตัด 0, O, I และ l ออก เพื่อไม่ให้คนสับสนเมื่อคัดลอกด้วยมือ ส่วน Base62 เก็บตัวอักษรและตัวเลขไว้ครบและสั้นกว่าเล็กน้อย เลือก Base58 สำหรับสตริงที่คนต้องพิมพ์ และเลือก Base62 สำหรับสตริงที่เครื่องจัดการ