2013-01-08 126 views
2

我有一位客戶需要使用128位加密技術加密存儲在MySQL數據庫中的所有數據。128位PHP數據加密和解密

假設在將所有數據插入數據庫之前,會運行PHP函數對其進行加密。然後,當我從數據庫中提取數據時,我運行一個解密函數來吐出原始文本/信息。

有人能指出我在正確的方向。我知道這些函數將使用共享/公用密鑰來加密和解密,但是它是什麼使它成爲128位?在PHP中是否有預建功能?

欣賞任何建議。

斯科特

回答

1

通常,「128位加密」是指使用128位密鑰的symmetric encryptionAES -128是加密算法的絕佳選擇。

您還需要選擇mode of operation:如果您只需要隱私,CBC,CFB,OFB和CTR都是不錯的選擇,但如果您還想保護數據免遭篡改,則應使用authenticated encryption模式,例如EAX。除非你的所有記錄比單個AES塊(也是128位)短,並且最好不要,即使它們是而不是

根據您選擇的模式,您通常還需要爲每條記錄生成一個初始化向量(IV),該向量應該是唯一且不可預知的隨機密碼塊(AES爲128位)。有很多方法可以生成一個,但兩個好的方法(recommended by NIST)要麼使用cryptographically secure pseudorandom number generator的輸出,要麼在ECB模式下加密唯一的ID(這是可以使用的罕見情況之一)。根據您使用的加密庫,它可能會爲您處理這個問題。請注意,如果您更改了記錄中的加密數據,則應該始終更改IV。

正如其他答案說明,如果您使用PHP,則mcrypt是加密庫的不錯選擇。

+0

非常感謝您的信息。我想知道如果你能給我看一個完整的加密和解密函數的例子嗎?例如,如果我的字符串是「這是一個字符串」,它存儲爲$字符串? –

1

我希望here是您的解決方案。請參閱頁面上的兩個功能encryptdecrypt,並抓住想法。