发表于:2013-9-13 10:12
字体:大 中 小 | 上一篇 | 下一篇 | 我要投稿
作者:happyrabbit456 来源:51Testing软件测试网采编
4:PHP版本(AES)
开发中选择了AESclass 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);}}$aes = new CryptAES();//密钥修改成了16位 和JAVA的一致$aes->set_key('AKlMU89D3FchIkhK');//$aes->set_key('AKlMU89D3FchIkhKyMma6FiE');$aes->require_pkcs5();$rt = $aes->encrypt('1qaz2ws');echo $rt . '<br/>';echo $aes->decrypt($rt) . '<br/>';exit;
测试技术了解
2023测试行业调查报告
挣点稿费
AI与软件测试
春招开始了,如何面试软件测试工程师?
WEB单元测试编写
测试项目中,如何提升个人和测试团队的工作效...
Bug定位与分析,测试员你中招了吗?
一文搞懂渗透测试:web渗透测试与黑客入侵的...
利用Selenium轻松实现网页截图功能
法律顾问:上海兰迪律师事务所 项棋律师版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024 投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017
沪ICP备05003035号
沪公网安备 31010102002173号