Tôi đang viết một lớp để xử lý dữ liệu được mã hóa, về cơ bản nó sẽ được sử dụng để mã hóa dữ liệu được lưu trữ trong DB và sau đó lại giải mã nó khi truy xuất.các vấn đề đang cố gắng để mở openssl_encrypt để làm việc
Dưới đây là những gì tôi đã viết:
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;
}
}
Tôi đang cố gắng để mã hóa một chuỗi trước khi lưu trữ, và tôi nhận được cảnh báo PHP sau:
Cảnh báo: openssl_encrypt(): IV đã vượt qua dài 32 byte dài hơn 16 byte được mong đợi bằng mật mã đã chọn, cắt ngắn trong/var/www/blahblah ... trên dòng xxx
Tôi đã googled điều này, đã googled IV chức năng, tôi không thể tìm thấy sweetheat trên một trong hai. Mọi lời khuyên đều được hoan nghênh ở đây.
Cảm ơn
Mã của bạn không thể nào làm việc. Bạn cần truyền IV cùng với bản mã. – SLaks
tôi đã thay đổi nó như thế này: \t \t // Mã hóa một chuỗi \t \t public function encryptString ($ string) { \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 // Trả về giá trị được mã hóa để lưu trữ \t \t \t trở openssl_encrypt ($ string, $ this-> encryptionMethod, $ this-> retrieveKey(), 0, $ iv); \t \t} \t \t Nhưng tôi vẫn gặp lỗi tương tự? Tôi không biết phải làm gì và tài liệu bên cạnh không tồn tại ... – ThePHPUnicorn
nó phải là cảnh báo 'MCRYPT_RIJNDAEL_128' – CIRCLE