Hashids เป็นไลบรารี PHP ขนาดเล็กสำหรับสร้างรหัสที่เหมือนกับ YouTube จากตัวเลข ใช้เมื่อคุณไม่ต้องการเปิดเผยรหัสตัวเลขของฐานข้อมูลแก่ผู้ใช้: https://hashids.org/php
ต้องการแพ็กเกจนี้ พร้อมด้วย Composer ในไดเร็กทอรีรากของโปรเจ็กต์ของคุณ
composer require hashids/hashids
จากนั้นคุณสามารถนำเข้าคลาสไปยังแอปพลิเคชันของคุณ:
use Hashids Hashids ;
$ hashids = new Hashids ();
$ hashids -> encode ( 1 );
หมายเหตุ Hashids จำเป็นต้องมีส่วนขยาย
bcmath
หรือgmp
เพื่อให้สามารถทำงานได้
use Hashids Hashids ;
$ hashids = new Hashids ();
$ id = $ hashids -> encode ( 1 , 2 , 3 ); // o2fXhV
$ numbers = $ hashids -> decode ( $ id ); // [1, 2, 3]
encode()
: use Hashids Hashids ;
$ hashids = new Hashids ();
$ hashids -> encode ( 1 , 2 , 3 ); // o2fXhV
$ hashids -> encode ([ 1 , 2 , 3 ]); // o2fXhV
$ hashids -> encode ( ' 1 ' , ' 2 ' , ' 3 ' ); // o2fXhV
$ hashids -> encode ([ ' 1 ' , ' 2 ' , ' 3 ' ]); // o2fXhV
ส่งชื่อโปรเจ็กต์เพื่อทำให้รหัสเอาต์พุตของคุณไม่ซ้ำกัน:
use Hashids Hashids ;
$ hashids = new Hashids ( ' My Project ' );
$ hashids -> encode ( 1 , 2 , 3 ); // Z4UrtW
$ hashids = new Hashids ( ' My Other Project ' );
$ hashids -> encode ( 1 , 2 , 3 ); // gPUasb
โปรดทราบว่ารหัสเอาต์พุตจะถูกเสริมให้พอดีกับความยาวที่กำหนดเป็น อย่างน้อยเท่านั้น ไม่ได้หมายความว่ามันจะยาว ขนาด นั้น
use Hashids Hashids ;
$ hashids = new Hashids (); // no padding
$ hashids -> encode ( 1 ); // jR
$ hashids = new Hashids ( '' , 10 ); // pad to length 10
$ hashids -> encode ( 1 ); // VolejRejNm
use Hashids Hashids ;
$ hashids = new Hashids ( '' , 0 , ' abcdefghijklmnopqrstuvwxyz ' ); // all lowercase
$ hashids -> encode ( 1 , 2 , 3 ); // mdfphx
มีประโยชน์ถ้าคุณต้องการเข้ารหัส ObjectIds ของ Mongo โปรดทราบว่า ไม่มีการจำกัด จำนวนเลขฐานสิบหกที่คุณสามารถส่งผ่านได้ (ไม่จำเป็นต้องเป็น ObjectId ของ Mongo)
use Hashids Hashids ;
$ hashids = new Hashids ();
$ id = $ hashids -> encodeHex ( ' 507f1f77bcf86cd799439011 ' ); // y42LW46J9luq3Xq9XMly
$ hex = $ hashids -> decodeHex ( $ id ); // 507f1f77bcf86cd799439011
เมื่อถอดรหัส เอาต์พุตจะเป็นอาร์เรย์ของตัวเลขเสมอ (แม้ว่าคุณจะเข้ารหัสเพียงตัวเลขเดียว):
use Hashids Hashids ;
$ hashids = new Hashids ();
$ id = $ hashids -> encode ( 1 );
$ hashids -> decode ( $ id ); // [1]
ไม่รองรับการเข้ารหัสตัวเลขติดลบ
หากคุณส่งอินพุตปลอมไปที่ encode()
สตริงว่างจะถูกส่งกลับ:
use Hashids Hashids ;
$ hashids = new Hashids ();
$ id = $ hashids -> encode ( ' 123a ' );
$ id === '' ; // true
อย่าใช้ไลบรารีนี้เป็นมาตรการรักษาความปลอดภัย อย่า เข้ารหัสข้อมูลที่ละเอียดอ่อนด้วย Hashids ไม่ใช่ ไลบรารีการเข้ารหัส
วัตถุประสงค์หลักของ Hashids คือการทำให้รหัสตัวเลขสับสน ไม่ได้ มีวัตถุประสงค์หรือทดสอบเพื่อใช้เป็นเครื่องมือรักษาความปลอดภัยหรือการบีบอัด ต้องบอกว่าอัลกอริทึมนี้พยายามทำให้รหัสเหล่านี้สุ่มและคาดเดาไม่ได้:
ไม่มีรูปแบบที่แสดงเมื่อเข้ารหัสตัวเลขที่เหมือนกันหลายตัว (3 แสดงในตัวอย่างต่อไปนี้):
use Hashids Hashids ;
$ hashids = new Hashids ();
$ hashids -> encode ( 5 , 5 , 5 ); // A6t1tQ
เช่นเดียวกับการเข้ารหัสชุดตัวเลขกับการเข้ารหัสแยกกัน:
use Hashids Hashids ;
$ hashids = new Hashids ();
$ hashids -> encode ( 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ); // wpfLh9iwsqt0uyCEFjHM
$ hashids -> encode ( 1 ); // jR
$ hashids -> encode ( 2 ); // k5
$ hashids -> encode ( 3 ); // l5
$ hashids -> encode ( 4 ); // mO
$ hashids -> encode ( 5 ); // nR
รหัสนี้เขียนขึ้นโดยมีจุดประสงค์เพื่อวางรหัสเอาต์พุตในตำแหน่งที่มองเห็นได้ เช่น URL ดังนั้น อัลกอริทึมพยายามหลีกเลี่ยงการสร้างคำสาปภาษาอังกฤษที่พบบ่อยที่สุดโดยการสร้างรหัสที่ไม่มีตัวอักษรต่อไปนี้ติดกัน:
c, f, h, i, s, t, u