Не создавайте новый IV каждый раз, когда вы хотите что-то зашифровать / расшифровать. Вам нужен тот же IV во время шифрования и дешифрования. В режиме CBC нет необходимости получать секрет IV, если он случайный при его создании. Поэтому ваш код должен выглядеть примерно так:
class AES256encryption {
var $secret = '';
var $cipher_key = '';
var $mciv = NULL;
function AES256encryption($secret='') {
if (empty($secret)) {
global $secret;⋅⋅⋅⋅⋅⋅⋅⋅⋅
if (empty($secret)) {
$secret = "some random secret string";
}
}
$this->secret = $secret;
$this->gen_mciv();
}
function gen_cipher() {
if (empty($this->cipher_key)) {
$this->cipher_key = substr(sha1($this->secret),0,20);
}
}
function gen_mciv() {
if(NULL === $this->mciv)
{
$this->mciv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC), MCRYPT_RAND);
}
}
function encrypt($text) {
$this->gen_cipher();
return trim(base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $this->cipher_key, $text, MCRYPT_MODE_CBC, $this->mciv)));
}
function decrypt($text) {
$this->gen_cipher();
return trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $this->cipher_key, base64_decode($text), MCRYPT_MODE_CBC, $this->mciv));
}
}
$ac = new AES256encryption('my secret pass');
$z = $ac->encrypt('test');
var_dump($z);
$u = $ac->decrypt($z);
var_dump($u);
И это похоже на работу:
mycroft:~ $ php test_aes.php
string(44) "+KRlfrPp37FfwB4gJXQ67X+8bjbjxEFHjOn55YOgU5o="
string(4) "test"
Пожалуйста, отметьте режим работы блочного шифра , который возобновляет работу.