PHP:Hash function

這年頭 md5 已經不可靠了
幾天前開始用 mhash 來處理 sha256 格式的密碼
由於使用 FreeBSD / PHP 5.1.6 平台的關係
所以就很直覺得使用 mhash() 來替代原本的 md5()
而剛剛在 Windows XP 上執行一樣的程式
發現執行 mhash() 有些問題
查了官網 PHP 發現原來 mhash() 自 PHP 5.3.0 要被打入冷宮了
所以還是乖乖統一用 hash() 來的比較保險!

Note: This extension has been moved to the » PECL repository and is no longer bundled with PHP as of PHP 5.3.0. This extension is obsoleted by Hash.

而 hash() 是從 PHP 5.1.2 才開始支援的
如果有要跨越 PHP 5.1 至 5.3 甚至 PHP 6.0 的程式
在這邊還是先檢查一下 PHP 版本後看要用 mhash() or hash() 好


使用 mhash():
function LoginPassword($PWD)
{
return bin2hex(mhash(MHASH_SHA256, $PWD));
}
注意:使用 mhash 加密時,需再使用 bin2hex() 函式轉換,否則會亂碼!


使用 hash():
function LoginPassword($PWD)
{
return hash('sha256', $PWD);
}

另外使用 hash() 的好處是,他比 mhash() 還支援更多種類的加密方式喔!

mhash 支援的加密方式:
  • MHASH_ADLER32
  • MHASH_CRC32
  • MHASH_CRC32B
  • MHASH_GOST
  • MHASH_HAVAL128
  • MHASH_HAVAL160
  • MHASH_HAVAL192
  • MHASH_HAVAL256
  • MHASH_MD4
  • MHASH_MD5
  • MHASH_RIPEMD160
  • MHASH_SHA1
  • MHASH_SHA256
  • MHASH_TIGER
  • MHASH_TIGER128
  • MHASH_TIGER160

hash 支援的加密方式:
md4 md5 sha1 sha256 sha384 sha512 ripemd128 ripemd160 whirlpool tiger128,3 tiger160,3 tiger192,3 tiger128,4 tiger160,4 tiger192,4 snefru gost adler32 crc32 crc32b haval128,3 haval160,3 haval192,3 haval224,3 haval256,3 haval128,4 haval160,4 haval192,4 haval224,4 haval256,4 haval128,5 haval160,5 haval192,5 haval224,5 haval256,5

Comments

Anonymous said…
你好,我是學php的初學者,在書上看到Hash()函數,不知道是不是它在php5才出現,我並未能找到它的解釋。

在搜尋中找到你的blog,請問一下,Hash()是什麼意思呀?
Goodspeed said…
您好,

hash() 的確是在 PHP5(5.1.2) 才有的 function
但在 mhash 可以用在 PHP4 & 5

Hash() 提供多種的方式加密
(i.e. "md5", "sha256", "haval160,4", etc..)
不過都是為單向的加密方式
也就是說無法將密碼透過解密的方式還原

網站一經 MD5、Sha256 等加密過
就很難(甚至不可能)轉換成 Hash() 的方式
這需要在網站一開始設計時就須考慮清楚的問題

PS. 一般網站系統目前還是用 MD5() 加密的比較多

:)

Popular posts from this blog

CentOS7 如何新增/移除 Rich Rule for firewalld

mac 安裝 mtr

如何設定 SSL VPN 分割通道 on Fortigate 80C