Mam trochę dziwne jeden w tej klasie:ostrzeżenie mcrypt ale nadal odszyfrowuje dane
<?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);
}
}
Dzwoniąc to tak:
<?php
$encryption = new \lib\Encryption('somekey');
echo $encryption->decrypt($safeInfo);
plony udusić:
Warning: mdecrypt_generic(): 90 nie jest prawidłowym zasobem MCrypt w E: \ htdocs \ site \ application \ lib \ encryption.cls.php na linii 82
Uwaga: mcrypt_generic_deinit() 90 nie jest ważne źródło MCrypt E: \ htdocs \ \ miejscu aplikacji \ lib \ encryption.cls.php na linii 84
Uwaga: mcrypt_module_close() 90 nie jest ważne MCrypt zasobów w E: \ htdocs \ site \ Application \ lib \ encryption.cls.php na linii 85
(. linie te są przedstawione w klasie szyfrowania)
I
oczekiwany rozszyfrował string (jak w pomyślnym odszyfrowaniu).
Byłbym wdzięczny każdemu, kto mógłby wskazać, dlaczego ostrzeżenia są zgłaszane i dlaczego nie wpływają one na wynik.
PS wszelkie komentarze na temat skuteczności klasy szyfrowania najbardziej pożądane.
Jaka jest wartość '$ this -> _ ch'? – jeroen
var_dump ($ this -> _ ch) dostarcza zasobów (90, mcrypt) –
Próbowałem uruchomić twój skrypt zarówno w systemie Linux, jak i Windows. Nie otrzymałem żadnych ostrzeżeń. Upewniłem się, że wszystkie błędy też się pojawią. Nie mogłem odtworzyć tego samego wyniku. Jeśli najpierw zadzwonię do mycrypt_module_close, to pokaże ostrzeżenia, ale nie odszyfruje. – Gohn67