Hashids是PHP中一種常用的加解密算法,它的思想是將數字轉化為一串短碼,使得URL中傳遞數字變得更加方便和安全。在實際開發中,我們不僅可以通過Hashids加密用戶ID等敏感數據,還可以用它來縮短任意數字。下面就讓我們深入了解一下Hashids的思路以及應用。
Hashids可以將一個數字或多個數字轉化為一串短代碼,例如ID為12345的用戶可以被加密成類似“kRp”這樣的字符串。這個過程就是通過Hashids算法實現的。
require_once 'vendor/autoload.php'; use Hashids\Hashids; $id = 12345; $hashids = new Hashids(); $hash = $hashids->encode($id); echo $hash; // "kRp"
同時,我們也可以通過Hashids把短碼還原為原本的數字或數字集合:
$hashids = new Hashids(); $id = $hashids->decode("kRp"); print_r($id); // Array ( [0] =>12345 )
在開發中,Hashids能幫助我們實現很多功能。例如,我們的網站中用戶可以通過分享文章、帖子等實現流量導入,此時我們可以將文章ID使用Hashids加密,通過短碼分享。相同的,我們也可以在網站中使用隨機ID替換真實ID,防止惡意攻擊者輕易爬取或者窺探部分敏感信息。更為常用的情況是,在數據導入、導出時,Hashids可以很方便地縮短數據,加快傳輸速度。
除此之外,Hashids也允許我們對短碼使用自定義salt值,提高安全性。這種加密方式可以使得同一數字在不同salt值下生成的短碼也不同,防止欺騙和信息竊取。以下是修改Hashids生成的短碼加鹽的方法:
$salt = "ThisIsMySaltValue"; $hashids = new Hashids($salt, 5); // salt的默認值為abc123 $id = 12345; $hash = $hashids->encode($id); echo $hash; // VVNaM
以上代碼將使用“ThisIsMySaltValue”加鹽,并且將生成的短碼長度限制在5個字符之內。
細節決定成功。在實際應用時,我們需要注意以下兩個方面:
1. Hashids算法本身比較簡單,短碼也不夠長,因此不可避免地存在短碼沖突的風險。為減少這一風險,在實際使用時需要用UUID或其他識別碼作為原始ID,再將其進行Hashids加密。
2. Hashids算法可逆,存在顛倒、截取或者遍歷Hashids生成的整個字符集的風險。因此,Hashids適合加密一些比較中等敏感的信息,對于高度敏感的信息還需要通過其他加密手段保護。
除此之外,我們在使用時盡量不要使用敏感的信息進行加密,可以使用一些無關或者消息對稱性不強的數字。同時,對于需要常規更新的信息,也可以使用一些更加動態的加密方式,如OAuth。
總的而言,Hashids算法具有非常廣泛的應用場景和巨大的優勢,但是在實際應用中,需要做好風險管控,保證信息安全。我們可以參考https://hashids.org/php/了解更多Hashids的使用細節。