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

PHP 自定義 Hash 函數實現原理與簡易加密示例

     編輯:PHP 相關知識

PHP 自定義 Hash 函數實現原理與簡易加密示例

Hash 函數將任意長度輸入映射為固定長度輸出,是數據完整性校驗、密碼存儲、緩存鍵生成的基石。本文展示一個極簡的 PHP 自定義 Hash 算法,解析其原理,並說明為何不可用於安全加密場景。

簡易 Hash 算法代碼

<?php
function SimpleHash($str) {
    $n = 0;
    // 遍歷字符串每個字符,累加 ASCII 碼值
    for ($c = 0; $c < strlen($str); $c++) {
        $n += ord($str[$c]);
    }
    // 返回整數摘要
    return $n;
}

// 測試
$TestString = 'www.jb51.net';
echo SimpleHash($TestString); // 輸出: 1082
?>

算法原理解析

  1. 輸入遍歷: 逐字符讀取字符串。
  2. ASCII 累加: ord() 獲取字符 ASCII 碼,累加至整數變量 $n。
  3. 輸出摘要: 最終整數即為該字符串的「指紋」。

本質上是一個加權和校驗和,屬於最基礎的非加密 Hash。

特性與缺陷分析

特性表現
確定性相同輸入必得相同輸出
單向性無法從輸出反推輸入(信息丟失)
衝突極高異序字符串(如 "ab" 和 "ba")產生相同值
分佈不均輸出範圍受字符串長度限制,非均勻分佈
無雪崩效應輸入微小變化導致輸出微小變化
極易逆向已知輸出可構造無限多碰撞輸入

適用與禁用場景

  • ✅ 教學演示 Hash 基本概念
  • ✅ 極簡場景的非安全標識生成(如臨時緩存鍵前綴)
  • ❌ 密碼存儲(必須用 password_hash()/bcrypt/Argon2)
  • ❌ 數據完整性校驗(用 CRC32、MD5、SHA256)
  • ❌ 分佈式系統一致性 Hash(用 Ketama、Jump Consistent Hash)
  • ❌ 任何安全敏感場景

生產級替代方案

<?php
// 1. 密碼哈希(PHP 5.5+)
$hash = password_hash('my_password', PASSWORD_DEFAULT);
if (password_verify('my_password', $hash)) { /* 通過 */ }

// 2. 數據完整性
$checksum = hash('crc32b', $data);       // 快速、非加密
$digest   = hash('sha256', $data);       // 加密級

// 3. HMAC(帶密鑰驗證)
$hmac = hash_hmac('sha256', $data, $secret_key);

// 4. 一致性 Hash(分佈式)
// 採用成熟庫:amphp/consistent-hash, flexihash/flexihash
?>

總結

理解簡易 Hash 原理有助於掌握雜湊函數核心思想,但實際開發中嚴禁自行實現加密算法。請始終使用經過密碼學專家審計、標準庫提供的成熟函數,並關注 PHP 版本更新帶來的安全增強(如 PHP 7.2+ 強制引入 Libsodium)。

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