溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

php中Discuz加密算法的示例分析

發(fā)布時(shí)間:2021-08-31 14:31:00 來源:億速云 閱讀:102 作者:小新 欄目:開發(fā)技術(shù)

這篇文章將為大家詳細(xì)講解有關(guān)php中Discuz加密算法的示例分析,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

具體如下:

在拿Discuz進(jìn)行二次開發(fā)時(shí)需要在代碼里驗(yàn)證Discuz的用戶名密碼,結(jié)果不小心掉進(jìn)了坑里,因?yàn)镈iscuz的論壇有兩張表來存儲(chǔ)用戶數(shù)據(jù),一張?jiān)贒iscuz的數(shù)據(jù)庫ultrax里面的pre_common_member里面,另一個(gè)是存儲(chǔ)在了UCenter的數(shù)據(jù)庫ucenter的uc_members表里。花了很大功夫在研究ultrax庫里那張pre_common_member的數(shù)據(jù),研究它的密碼是如何生成的,結(jié)果搜了一下發(fā)現(xiàn)網(wǎng)上說是隨機(jī)生成的一個(gè)salt

心想這隨機(jī)生成的salt如何在登錄時(shí)進(jìn)行驗(yàn)證呢?然后網(wǎng)上說其實(shí)Discuz壓根就沒用那個(gè)密碼,自己試驗(yàn)了一下,果真如此,即使把pre_common_member里面的用戶密碼改掉,照樣能夠正常登錄,看來這個(gè)密碼壓根就沒用,害我繞了一個(gè)大圈子。

好了,進(jìn)入正題,Discuz的密碼加密算法其實(shí)就是兩次MD5加密,首先用明文進(jìn)行一次加密,之后隨機(jī)生成一個(gè)salt,再把第一次的密文后面添加salt作為明文再進(jìn)行一次MD5加密。salt保存在uc_members表里,可以通過用戶名進(jìn)行獲取。

像這樣:

MD5(MD5(明文)+salt)

下面是.net的實(shí)現(xiàn)代碼:

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();
}

總結(jié)密碼判斷方式:

① 要安裝UC

② 打開數(shù)據(jù)庫找到uc_members 這表,尋找最后一個(gè)字段"salt ",復(fù)制里面的值

③ 偽代碼:

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

④ 用IF判斷

⑤ 再說一次!那個(gè)隨機(jī)是6位數(shù)!

關(guān)于“php中Discuz加密算法的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

php
AI