爲了避免好的記性 html
class AESMcrypt{ 算法
/**
* 設置默認的加密key
*
@var str
*/
public static $defaultKey = "";
/**
* 設置默認加密向量
*
@var str
*/
private $iv = '';
/**
* 設置加密算法
*
@var str
*/
private $cipher;
/**
* 設置加密模式
*
@var str
*/
private $mode;
public function __construct($cipher = MCRYPT_RIJNDAEL_128, $mode = MCRYPT_MODE_CBC){
$this->cipher = $cipher;
$this->mode = $mode;
}
/**
* 對內容加密,注意此加密方法中先對內容使用padding pkcs7,而後再加密。
* @param str $content 須要加密的內容
*
@return str 加密後的密文
*/
public function encrypt($content){
if(empty($content)){
return null;
}
$srcdata = $content;
$block_size = mcrypt_get_block_size($this->cipher, $this->mode);
$padding_char = $block_size - (strlen($content) % $block_size);
$srcdata .= str_repeat(chr($padding_char),$padding_char);
return mcrypt_encrypt($this->cipher, $this->getSecretKey(), $srcdata, $this->mode, $this->iv);
}
/**
* 對內容解密,注意此加密方法中先對內容解密。再對解密的內容使用padding pkcs7去除特殊字符。
* @param String $content 須要解密的內容
*
@return String 解密後的內容
*/
public function decrypt($content){
if(empty($content)){
return null;
}
$content = mcrypt_decrypt($this->cipher, $this->getSecretKey(), $content, $this->mode, $this->iv);
$block = mcrypt_get_block_size($this->cipher, $this->mode);
$pad = ord($content[($len = strlen($content)) - 1]);
return substr($content, 0, strlen($content) - $pad);
}
} this
因爲使用的128算法,因此iv的size是16位,所以能夠輸入16位字符做爲iv向量而無須再mcrypt_create_iv。同時爲了兼容C#,使用了padding pkcs7做爲對內容的補充。 加密
另外補充一篇同類的文章:http://blog.sina.com.cn/s/blog_40e1ba640100scu7.html spa