永发信息网

php aes ecb pkcs7padding 加密

答案:2  悬赏:50  手机版
解决时间 2021-02-28 04:06
static string AesEncrypt(string str, string key)
{
if (string.IsNullOrEmpty(str)) return null;
Byte[] toEncryptArray = Encoding.UTF8.GetBytes(str);

System.Security.Cryptography.RijndaelManaged rm = new System.Security.Cryptography.RijndaelManaged
{
Key = Encoding.UTF8.GetBytes(key),
Mode = System.Security.Cryptography.CipherMode.ECB,
Padding = System.Security.Cryptography.PaddingMode.PKCS7
};

System.Security.Cryptography.ICryptoTransform cTransform = rm.CreateEncryptor();
Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);

return Convert.ToBase64String(resultArray, 0, resultArray.Length);
}

以上代码如何用PHP代码编写?
最佳答案
class CryptAES
{
protected $cipher = MCRYPT_RIJNDAEL_128;
protected $mode = MCRYPT_MODE_ECB;
protected $pad_method = NULL;
protected $secret_key = '';
protected $iv = '';

public function set_cipher($cipher)
{
$this->cipher = $cipher;
}

public function set_mode($mode)
{
$this->mode = $mode;
}

public function set_iv($iv)
{
$this->iv = $iv;
}

public function set_key($key)
{
$this->secret_key = $key;
}

public function require_pkcs5()
{
$this->pad_method = 'pkcs5';
}

protected function pad_or_unpad($str, $ext)
{
if ( is_null($this->pad_method) )
{
return $str;
}
else
{
$func_name = __CLASS__ . '::' . $this->pad_method . '_' . $ext . 'pad';
if ( is_callable($func_name) )
{
$size = mcrypt_get_block_size($this->cipher, $this->mode);
return call_user_func($func_name, $str, $size);
}
}
return $str;
}

protected function pad($str)
{
return $this->pad_or_unpad($str, '');
}

protected function unpad($str)
{
return $this->pad_or_unpad($str, 'un');
}

public function encrypt($str)
{
$str = $this->pad($str);
$td = mcrypt_module_open($this->cipher, '', $this->mode, '');

if ( empty($this->iv) )
{
$iv = @mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
}
else
{
$iv = $this->iv;
}

mcrypt_generic_init($td, $this->secret_key, $iv);
$cyper_text = mcrypt_generic($td, $str);
$rt=base64_encode($cyper_text);
//$rt = bin2hex($cyper_text);
mcrypt_generic_deinit($td);
mcrypt_module_close($td);

return $rt;
}

public function decrypt($str){
$td = mcrypt_module_open($this->cipher, '', $this->mode, '');
if ( empty($this->iv) )
{
$iv = @mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
}
else
{
$iv = $this->iv;
}

mcrypt_generic_init($td, $this->secret_key, $iv);
//$decrypted_text = mdecrypt_generic($td, self::hex2bin($str));
$decrypted_text = mdecrypt_generic($td, base64_decode($str));
$rt = $decrypted_text;
mcrypt_generic_deinit($td);
mcrypt_module_close($td);

return $this->unpad($rt);
}

public static function hex2bin($hexdata) {
$bindata = '';
$length = strlen($hexdata);
for ($i=0; $i<$length;$i += 2)
{
$bindata .= chr(hexdec(substr($hexdata, $i, 2)));
}
return $bindata;
}

public static function pkcs5_pad($text, $blocksize)
{
$pad = $blocksize - (strlen($text) % $blocksize);
return $text . str_repeat(chr($pad), $pad);
}

public static function pkcs5_unpad($text)
{
$pad = ord($text{strlen($text) - 1});
if ($pad > strlen($text)) return false;
if (strspn($text, chr($pad), strlen($text) - $pad) != $pad) return false;
return substr($text, 0, -1 * $pad);
}

}

$keyStr = '187522'; //私钥
$aes = new CryptAES();
$aes->set_key($keyStr);



?>
全部回答
3des需要的输入明文长度、密文长度都是8的整数倍。 而cbc.cfb都需要初始化向量的参数才能加密、解密、。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
紫荆园南门在什么地方啊,我要过去处理事情
全泰面馆地址有知道的么?有点事想过去
老公信用卡欠款法院会拍卖我们共同的唯一房产
慢阴坡地址有知道的么?有点事想过去
淘衣坊地址有知道的么?有点事想过去
利薄营胡同/协作胡同(路口)怎么去啊,有知道
用16位凌阳单片机怎样处理32位数据的乘法运算
跟孩子们写信,应该怎么落款,署名呢?
鑫贵福果菜食杂店在哪里啊,我有事要去这个地
最近总爱发脾气,看谁都讨厌,听别人说话很爱
新飞飞进了恶人谷怎样才能出来??
奇山街道惠民综合服务大厅地址在什么地方,想
97又1/50乘1/49加77又1/40乘1
好朋友文具地址在什么地方,想过去办事
请问全国有多少姓寇的,主要在什么地方。有名
推荐资讯
重庆清真宰牲场在什么地方啊,我要过去处理事
c#中的Dispose()
林志颖版天龙八部中的王语嫣和断誉结局
珠海长隆门票包括哪些
不属于脚注术语的是A.冲服B.后下C.捣碎D.煎服
2015款雪佛兰新赛欧3雾灯怎么安装
如果我买了十元钱的东西,回赠了五元礼券,是打
为什么我违章已经处理了查询时显示没处理
《宁波高鑫广场》作文
康婷盐蒸养生会所我想知道这个在什么地方
隆鼎国贸怎么去啊,有知道地址的么
为什么武汉的天气变那么快?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?