Tôi có một chút của một ai lạ trong lớp này:cảnh báo Mcrypt nhưng vẫn giải mã dữ liệu
<?php
namespace lib;
/**
* Short description of Crypt
*
* @author xxxx
* @package
*/
class Encryption
{
/**
* Short description of _ch
* handle to the mcrypt resource
*
* @access private
* @var $_ch
*/
private $_ch;
/**
* Short description of __construct
*
* @access public
* @author xxxx
* @param
* @return void
*/
public function __construct($keyData = NULL, $algorithm = \MCRYPT_RIJNDAEL_256, $mode = MCRYPT_MODE_ECB, $encLibPath = '', $modeDir = '')
{
$this->_ch = mcrypt_module_open($algorithm, $encLibPath, $mode, $modeDir);
$vector = mcrypt_create_iv (mcrypt_enc_get_iv_size($this->_ch), \MCRYPT_DEV_URANDOM);
$keySize = mcrypt_enc_get_key_size($this->_ch);
$key = substr(hash('SHA512', $keyData . $keySize), 0, $keySize);
$x = mcrypt_generic_init($this->_ch, $key, $vector);
}
/**
* Short description of encrypt
*
* @access public
* @author xxxx
* @param String $str
* @return String $res
*/
public function encrypt($str)
{
if(!is_string($str))
{
throw new \InvalidArgumentException('Attemptig to encrypt data that is not a string');
return false;
}
$res = mcrypt_generic($this->_ch, $str);
mcrypt_generic_deinit($this->_ch);
mcrypt_module_close($this->_ch);
#var_dump($str,$res);
return $res;
}
/**
* Short description of decrypt
*
* @access public
* @author xxxx
* @param String $str
* @return String $res
*/
public function decrypt($str)
{
if(!is_string($str))
{
throw new \InvalidArgumentException('Attemptig to decrypt data that is not a string');
return false;
}
82 $res = mdecrypt_generic($this->_ch, $str);
84 mcrypt_generic_deinit($this->_ch);
85 mcrypt_module_close($this->_ch);
#var_dump($str,$res);
return trim($res);
}
}
khi gọi này như sau:
<?php
$encryption = new \lib\Encryption('somekey');
echo $encryption->decrypt($safeInfo);
siết lãi suất:
Cảnh báo: mdecrypt_generic(): 90 không phải là tài nguyên MCrypt hợp lệ trong E: \ htdocs \ site \ application \ lib \ encrypt.cls.php trên dòng 82
Cảnh báo: mcrypt_generic_deinit(): 90 không phải là tài nguyên MCrypt hợp lệ trong E: \ htdocs \ site \ application \ lib \ encrypt.cls.php trên dòng 84
Cảnh báo: mcrypt_module_close(): 90 không phải là một MCrypt hợp lệ tài nguyên trong E: \ htdocs \ site \ ứng dụng \ lib \ encryption.cls.php trên đường dây 85
(. những dòng này được trình bày trong lớp mã hóa)
VÀ
dự kiến chuỗi giải mã (như trong giải mã thành công).
Tôi sẽ biết ơn bất cứ ai có thể chỉ ra lý do tại sao các cảnh báo được nêu ra và tại sao nó dường như không ảnh hưởng đến kết quả.
PS bất kỳ nhận xét nào về hiệu quả của lớp mã hóa được chào đón nhiều nhất.
Giá trị của '$ this -> _ ch' là gì? – jeroen
var_dump ($ this -> _ ch) tạo ra tài nguyên (90, mcrypt) –
Tôi đã thử chạy tập lệnh của bạn trên cả Linux và Windows. Tôi không nhận được bất kỳ cảnh báo nào. Tôi chắc chắn đã bật tất cả các lỗi. Tôi không thể tái tạo cùng một kết quả. Nếu tôi gọi mycrypt_module_close trước, sau đó nó sẽ hiển thị các cảnh báo, nhưng không giải mã được. – Gohn67