我正在編寫一個類來處理加密數據,本質上它將用於加密要存儲在數據庫中的數據,然後在檢索時再解密它。試圖讓openssl_encrypt工作的問題
下面是我寫的東西:
class dataEncrypt {
private $encryptString;
private $decryptString;
private $encryptionMethod;
private $key;
public function __construct() {
/* IMPORTANT - DONT CHANGE OR DATA WILL DAMAGE */
$this->key = sha1('StringToHash');
// Set the encryption type
$this->encryptionMethod = "AES-256-CBC";
}
// Generate the IV key
private function generateIV() {
$ivSize = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC);
return mcrypt_create_iv($ivSize, MCRYPT_RAND);
}
// Retrieve the key
private function retrieveKey() {
return $key;
}
// Encrypt a string
public function encryptString($string) {
// Return the encrypted value for storage
return openssl_encrypt($string, $this->encryptionMethod, $this->retrieveKey(), 0, $this->generateIV());
}
// Decrypt a string
public function decryptString($data) {
// return the decrypted data
return openssl_decrypt($data, $this->encryptionMethod, $this->retrieveKey(), 0, $this->generateIV());
return false;
}
}
我想在存儲之前爲字符串加密,我也得到了以下PHP警告:
警告:openssl_encrypt():IV通過長32個字節,這比選擇密碼,截斷在/ var/WWW/blahblah預計16長...在線XXX
我GOOGLE了這一點,香港專業教育學院的一派IV功能,我也無法找到甜心。任何意見都歡迎在這裏。
感謝
您的代碼不可能工作。您需要將IV與密文一起傳輸。 – SLaks
我改成了這一點: \t \t //加密的字符串\t \t公共函數encryptString($串){ \t \t \t $ ivSize = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256,MCRYPT_MODE_CBC); \t \t \t $ iv = mcrypt_create_iv($ ivSize,MCRYPT_RAND); \t \t \t //返回的加密值存儲 \t \t \t返回openssl_encrypt($字符串,$這 - > encryptionMethod,$這 - > retrieveKey(),0,$ⅳ); \t \t} \t \t 但我仍然得到相同的錯誤?我不知道該怎麼辦,文件旁邊不存在... – ThePHPUnicorn
它必須是'MCRYPT_RIJNDAEL_128' – CIRCLE