<?php
class Aes {
public function encode($value,$key) {
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$plaintext_utf8 = $value;
//md5做效验值
$md5_key = substr(md5($plaintext_utf8),8,16);
$plaintext_utf8 = $md5_key . $plaintext_utf8;
$ciphertext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $plaintext_utf8, MCRYPT_MODE_CBC, $iv);
$ciphertext = $iv . $ciphertext;
$ciphertext_base64 = base64_encode($ciphertext);
return $ciphertext_base64;
}
public function decode($value,$key) {
$ciphertext_dec = base64_decode($value);
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
$iv_dec = substr($ciphertext_dec, 0, $iv_size);
$ciphertext_dec = substr($ciphertext_dec, $iv_size);
$plaintext = @mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $ciphertext_dec, MCRYPT_MODE_CBC, $iv_dec);
$plaintext = rtrim($plaintext, "\0");
//md5效验
$md5_key = substr($plaintext,0,16);
$plaintext = substr($plaintext,16);
if($md5_key === substr(md5($plaintext),8,16))
return $plaintext;
else
return false;
}
}