首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 自定義 Hash 函數:簡易字串摘要演算法實現

     編輯:PHP 綜合知識

演算法原理

遍歷字串每個字符,累加 ASCII/Unicode 碼值,返回整數作為雜湊值。屬於**極簡非加密雜湊**,僅供教學/非安全場景(如簡單去重、索引分桶)。

代碼實現

function simpleHash(string $str): int {
    $hash = 0;
    $len = strlen($str);
    for ($i = 0; $i < $len; $i++) {
        $hash += ord($str[$i]);
    }
    return $hash;
}

// 使用
echo simpleHash('www.jb51.net'); // 1082

特性與限制

維度表現
碰撞率極高(異序字串同值,如 "ab" 與 "ba")
單向性不可逆,但非加密安全
分佈均勻性差,集中在小數值區間
長度敏感長字串數值溢出風險(PHP 整數無上限但性能下降)
適用場景教學演示、極簡索引、非安全校驗

進階改進:DJB2 / SDBM / FNV-1a

// DJB2 經典字串雜湊
function djb2Hash(string $str): int {
    $hash = 5381;
    for ($i = 0, $len = strlen($str); $i < $len; $i++) {
        $hash = (($hash << 5) + $hash) + ord($str[$i]); // hash * 33 + c
    }
    return $hash & 0xFFFFFFFF; // 32位無符號
}

// FNV-1a
function fnv1aHash(string $str): int {
    $hash = 0x811c9dc5;
    for ($i = 0, $len = strlen($str); $i < $len; $i++) {
        $hash ^= ord($str[$i]);
        $hash = ($hash * 0x01000193) & 0xFFFFFFFF;
    }
    return $hash;
}

生產級雜湊選型指南

用途推薦算法PHP 實現
密碼存儲Argon2id / bcryptpassword_hash() / password_verify()
數據完整性校驗SHA-256 / SHA-3hash('sha256', $data)
高效能非加密索引xxHash / MurmurHash3hash('xxh32', $data) (PHP 7.1+)
分佈式系統一致性雜湊Ketama / Jump Consistent Hash擴展或純 PHP 實現
HMAC 簽名SHA-256 HMAChash_hmac('sha256', $data, $key)

最佳實踐鐵律

  • 絕不自行設計加密雜湊算法,使用經標準化驗證的庫函數
  • 密碼**只用** password_hash()(PHP 5.5+ 內建 bcrypt/Argon2)
  • 雜湊輸出統一用十六進制或 Base64 儲存/傳輸
  • 雜湊非加密,敏感數據傳輸必須 TLS 加密

理解簡易雜湊原理有助於掌握雜湊表、布隆過濾器、一致性雜湊等數據結構核心,但生產環境**堅決使用標準庫**。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved