2012-07-29 41 views
1

如何存儲一些加密的字符串(大約一到幾個字)?我將如何使用php在Mysql中存儲一些加密的字符串?

讓我們假設我加密的字符串:

$key='fappings'; // Encryption Key 
$str='Mama Luigi'; // String that I Encrypted 
$encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $str, MCRYPT_MODE_CBC, md5(md5($key))); 

現在,假設我不想索引數據,或執行任何搜查,只想問兩個問題:

  1. 我最好使用哪種數據類型?我會猜varbinary,但我不知道...

  2. 我將如何使我的查詢過程?假設我會使用一個簡單的mysql_query()函數。

我看到有些人會實際上使使用Base64編碼,然後只需將其插入,現在的樣子普通的字符串會去,如:

mysql_query("insert into faps data='".base64_encode($encrypted)."'"); 

但直覺告訴我這不是辦法做到這一點。即使在空間上不夠。

什麼是更好的方法?

回答

1

根據所需的長度使用varbinary(如您所建議的)或blob。爲了安全起見,請將字符串的長度乘以4.

無需對base64進行編碼 - 這隻會增加更多的長度。所有你需要的是常規的轉義函數(基本級的mysql_real_escape_string,或者使用PDO進行綁定,它會使你的安全)。

另一種方法可能是使用MySql自己的加密功能。 http://dev.mysql.com/doc//refman/5.5/en/encryption-functions.html,因爲這可能爲您節省一些編程麻煩?將壓力從PHP服務器轉移到MySQL服務器 - 所以考慮哪些壓力較小,以及是否通過開放網絡傳輸未壓縮的SQL指令很重要。

+0

那麼我不會去自定義加密,這很有趣玩ofc,但我不只是沒有心情,我已經有一個已經很好的工作。我也注意到我也不會考慮PDO。但正如我所能理解的,使用mysql_real_escape_string($ encrypted)進行存儲是安全的嗎?數據是二進制的,不是字符串,所以我只是不知道......我只是謹慎小心,如果你能回答這個問題,我將不勝感激。 – Anonymous 2012-07-29 14:36:08

+0

是的,您可以使用mySQL_real_escape_sting存儲二進制數據。 – Robbie 2012-07-29 18:18:47

+0

謝謝,那實際上做了訣竅:)我不能認爲它就像轉義字符串逃脫一樣簡單,即使它是二進制 – Anonymous 2012-07-31 12:13:24

相關問題