2015-06-07 25 views
1

對於某些項目,我需要以加密形式存儲一些短字符串。對於目前的目的,使用它自己來加密它是理想的。使用與數據相同的密鑰對數據進行編碼可以嗎?

# This would be the usual way: 
result = AES_ENCRYPT(string, key) 

# but I would like to do it this way: 
result = AES_ENCRYPT(string, string) 

相同的字符串本身將被用作密鑰!

「字符串」總是一些短文本,如20個字母和數字。這個解決方案似乎比使用任何散列函數更好,因爲散列可能導致衝突 - 不同的字符串可能會產生相同的結果,我知道它的概率很低,但仍然不是零,所以我想避免這種結果。

我的問題是,我的方法安全嗎?使用數據本身編碼數據,是否會導致任何安全問題?這是否意味着,如果「攻擊者」知道它是通過加密我的方式產生的,那麼解密結果可能會更容易?謝謝。

注意:爲簡單起見,我沒有提到幾個不需要解釋的事情。只要相信我,我知道我在做什麼。我只是問這種方法是否會導致任何麻煩。

+0

那麼,如果不知道未加密的文本(因此不需要進行任何解密),它會被解密*。 –

+0

這是一個自制散列函數,它可能導致衝突。改用標準的散列函數。 – CodesInChaos

+0

@ Scott-Hunter我不需要解密它。爲了簡單的問題,我沒有提到幾個不需要解釋的事情。只要相信我,我知道我在做什麼。我只是問這是否會導致麻煩。 –

回答

1

如果使用相同的密鑰,則加密僅保證唯一性。如果你使用不同的密鑰,那麼不能保證唯一性。如果要保證輸出的唯一性,請保留相同的密鑰並確保輸入字符串是唯一的。要麼你只能接受唯一的字符串(比如用戶名),要麼給字符串添加salt以使其他字符串唯一。

相關問題