首頁  >  文章  >  後端開發  >  php用戶密碼加密演算法解析

php用戶密碼加密演算法解析

怪我咯
怪我咯原創
2018-05-28 11:50:313448瀏覽

常見的加密演算法可以分成三類,對稱加密演算法,非對稱加密演算法和Hash演算法。

對稱加密

    指加密和解密使用相同金鑰的加密演算法。對稱加密演算法的優點在於加解密的高速度和使用長金鑰時的難以破解性。假設兩個用戶需要使用對稱加密方法加密然後交換數據,則用戶最少需要2個密鑰並交換使用,如果企業內用戶有n個,則整個企業共需要n×(n-1) 個密鑰,密鑰的產生和分發將成為企業資訊部門的惡夢。對稱加密演算法的安全性性取決於加密金鑰的保存情況,但要求企業中每一個持有金鑰的人都保守秘密是不可能的,他們通常會有意無意的把金鑰洩漏出去-如果一個使用者使用的金鑰被入侵者所獲得,入侵者便可以讀取該使用者金鑰加密的所有文檔,如果整個企業共用一個加密金鑰,那麼整個企業文檔的保密性便無從談起。

常見的對稱加密演算法:DES、3DES、DESX、Blowfish、IDEA、RC4、RC5、RC6和AES

這篇文章主要介紹了php用戶密碼加密演算法,較為詳細的分析了Discuz加密演算法的原理,並結合實例形式對比了.net演算法的實現方法總結了php進行用戶加密的流程與實作方法,需要的朋友可以參考下

Discuz的密碼加密演算法其實就是兩次MD5加密,先用明文進行一次加密,之後隨機產生一個salt,再把第一次的密文後面加上salt當作明文再進行一次MD5加密。 salt保存在uc_members表裡,可以透過使用者名稱進行取得。

像這樣:

MD5(MD5(明文)+salt)

下面是.net的實作程式碼:

string GetDiscuzPWString(string sourceStr, string salt)
{
   return GetMd5Hash(string.Concat(GetMd5Hash(sourceStr),salt));
}
string GetMd5Hash(string input)
{
  MD5 md5Hasher = MD5.Create();
  byte[] data = md5Hasher.ComputeHash(Encoding.Default.GetBytes(input));
  StringBuilder sBuilder = new StringBuilder();
  for (int i = 0; i < data.Length; i++)
  {
    sBuilder.Append(data[i].ToString("x2"));
  }
  return sBuilder.ToString();
}

總結密碼判斷方式:

① 要安裝UC

② 開啟資料庫找到uc_members 這表,尋找最後一個欄位"salt ",複製裡面的值

③ 偽代碼:

$s=md5(md5("密码")."salt字段的值");
echo $s;

④ 用IF判斷

⑤ 再說一次!那個隨機是6位數!

以上是php用戶密碼加密演算法解析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn