2011-10-09 212 views
0

什麼是最好的加密/解密類/函數,可以加密一個數組或數據對象並將其作爲 散列 序列化的字符串返回?加密/解密PHP類

然後,在解密時,可以將序列化的字符串解密回到其包含對象或數組值的原始值的形式。

感謝

回答

2

mcrypt庫有許多函數可以用你夢想的方式進行加密。以下是使用AES的示例:

$secretKey = 'the longer, the better'; 
$originalString = 'some text here'; 

$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC); 
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); 
$crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $secretKey, $originalString, 
           MCRYPT_MODE_CBC, $iv); 
printf("Original string: %s\n", $originalString); 
// Returns "Original string: some text here" 

printf("Encrypted string: %s\n", $crypttext); 
// Returns "Encrypted string: <gibberish>" 

$decrypttext = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $secretKey, $crypttext, 
           MCRYPT_MODE_CBC, $iv); 

// Drop nulls from end of string 
$decrypttext = rtrim($decrypttext, "\0"); 

printf("Decrypted string: %s\n", $decrypttext); 
// Returns "Decrypted string: some text here" 
+0

如果您打算輕鬆與其他系統互操作,我鼓勵您考慮不使用MCRYPT_RIJNDAEL_256。 Rijandael的大多數實現(包括AES)都使用128位塊大小。使用256位塊大小可以作爲其他系統與PITA服務交流的PITA。您仍然可以使用帶128位Rijandael塊的256位密鑰。 –

3

前言:你似乎有一個概念,即哈希一些數據將是同樣的事情對其進行加密。散列是不是加密並且不能用密碼或密鑰文件反轉,就像加密可以。 PHP提供了幾個哈希協議,如md5md5_file),SHA1SHA1_file)。這一切都取決於你使用這個散列和你在做什麼散列。

+2

+1。如果您擔心用戶故意造成衝突,則MD5很糟糕,因爲算法很脆弱。 SHA1對速度有好處。如果你想減慢速度,Bcrypt是很好的。各種各樣的其他人。 – ceejayoz

+0

好吧我修改了我的問題,我的目的不是永久加密數據作爲不可逆字符串。相反,我喜歡看我們如何解密一個對象或數組。 – YajeDev