加密演算法中的加鹽值

2021-09-08 14:21:37 字數 1755 閱讀 5492

在應用中,出於到安全的考慮和資料的保密,需要使用到加密演算法,有時候為了讓加密的的結果更加撲朔迷離神鬼莫測一些,常常會給被加密的資料加點「鹽」。說白了,鹽就是一串數字,完全是自己定義的,不多說,上例項。

/**

* 獲取當前使用者鹽

** @param string $extrakey 額外金鑰

* @return string

*/public function getsalt($extrakey = null)

// 今天凌晨5點前

// 日期標示符仍用昨天的

else

return md5('voyagemobile:' . $datestring . ':' . $this->_uid . ':' . $extrakey);

}

這就是我們程式中,使用的乙個生成鹽值的函式,這函式的返回值就是所謂的鹽值,請注意這個函式的命名,哈哈。 函式的使用如下:

/**

* 加密

** @param string $content 待加密內容

* @param string $extrakey 額外金鑰

* @return string

*/public function encrypt($content, $extrakey = null)

為什麼我們要使用鹽值。在回答這個問題之前,我們討論一下加密演算法,常用的加密演算法大致分為兩種:可逆和不可逆,如md5()不可逆。rijndael可逆。

在不可逆的加密演算法中,加鹽值通常是「錦上添花」,因為類似於md5()這樣的演算法已經夠用了,如果還擔心的會被暴力破解的話,可加點鹽。 如:

md5('voyagemobile:' . $this->getsalt($extrakey));
重點是在可逆的演算法中使用加鹽值。

在我們的遊戲中,我們需要對使用者id即uid使用可逆演算法加密,為什麼呢,如果不加密會很危險,例如,其它玩家獲取到你的uid可以重複攻擊你,或者改一下uid就可以攻擊其他玩家,在造船廠,改一下船的id,如果後台不驗證,就可以隨意造船了,這就是串號攻擊。還有乙個特殊的情況,如果我知道了乙個裝備的id,如果這個裝備恰好是贈品,不能在商店**,我可以偽造乙個url請求購買,這個時候,後台判斷這個商品確實存在(因為它是贈品),所以可能購買成功。

這個時候就要對id加密了,而且還是可逆的,因為我需要知道你將要攻擊誰,購買什麼裝備,對吧。這個時候或許加鹽的必要性還是沒有體現出來,因為我對id加密就比較安全了,這樣就可以防止串號了,何必還有乙個加鹽值。

請注意,會有這樣的情況,在活動模組中,我得到乙個裝備,我雖然不知道itemid,當是我知道了這個裝備id加密後的一串數字。然後我就去拿這個數字去商店裡面購買這個裝備,而這個裝備又是不能購買的。在資料庫中,我們把不能購買的裝備的**設定為0,並且和能購買的裝備放在乙個表中。 注意,這樣的設計導致我能夠購買到這個裝備,而且一毛錢不花!

怎樣解決這個問題,我們就需要加鹽了。思路就是,在活動模組中,給所有的裝備加密使用鹽值,在商店模組中,也給所有的裝備加鹽,使用不同的鹽值。這樣的結果就是同乙個裝備,在不同的模組itemid也是不同的。

在後台也需要加乙個判斷,這個裝備是否能購買!

這就是加鹽的乙個好處。

需要注意點:

保證鹽值的唯一行,在我們遊戲中,通常會使用到玩家uid造鹽,這樣,不同的玩家看到的加密後的字串也不一樣。

保證鹽值的時效性,這也是出於安全的考慮,經常換鹽值,這樣加密後的字串也是變動的,不容易找到規律。

對稱加密演算法 DES加密演算法

一 對稱加密演算法 對稱加密也稱為常規加密 私鑰或單鑰加密。乙個對稱加密由5部分組成 明文 plaintext 這是原始資訊或資料,作為演算法的輸入。加密演算法 encryption algorithm 加密演算法對明文進行各種替換和轉換。金鑰 secret key 金鑰也是演算法的輸入。演算法進行...

使用者名稱密碼加密演算法 MD5 加鹽

一 第一代密碼 第一代密碼使用者名稱的密碼直接儲存在伺服器的資料庫上,一旦資料庫洩漏,資料庫裡的使用者名稱和密碼都是明文的。二 第二代密碼 第二代密碼將使用者名稱密碼用md5演算法加密,把加密後的密碼存入伺服器資料庫中。當使用者下次輸入密碼登陸的時候可以經過md5運算,將運算值和資料庫中的密碼比較,...

gentry同態加密演算法 同態加密演算法

本文對同態加密演算法進行學習。參考文章同態加密演算法。定義同態加密演算法保證對聯合密文的解密結果等價於聯合明文。若存在同態加密演算法f,針對明文a和b,加密後分別得到a f a b f b 將其和a b 解密後得到a b,則同態加密演算法f被成為加法同態加密演算法。加法同態演算法的加密和解密分別用e...