您好,欢迎访问一九零五行业门户网

php代码兑现aes加密

php代码实现aes加密
发现php4的加密模块在php5的不被支持了,硬要加上这个模块会导致启动时候出现警告对话框。
于是花了一天时间将as3的加密类翻译成了php的,该加密类是google的开源项目
http://code.google.com/p/as3crypto/
_pad = new pkcs5(); //为了与java保持一致,所以采用pkcs5填充 $key = hex::string2bytearray(base64_decode($base64keystring)); $this->_mode = new ecbmode(new aeskey($key), $this->_pad); $this->_pad->setblocksize($this->_mode->getblocksize()); } /** * 将明文加密为密文base64编码字符串 * @param plainsrc 明文 * @return 密文base64编码 */ public function encrypt($plainsrc) { $src = hex::string2bytearray($plainsrc); $src = $this->_mode->encrypt($src); return base64_encode(hex::bytearray2string($src)); } /** * 将base64编码字符串(密文)解密成 明文 * @param base64src 密文base64编码字符串 * @return 明文 */ public function decrypt($base64src) { $src = base64_decode($base64src); $src = $this->_mode->decrypt(hex::string2bytearray($src)); return hex::bytearray2string($src); } /** * 释放内存 */ public function dispose() { $this->_mode->dispose(); }}//var_dump(hex::string2bytearray(base64_decode(mk2x82el6jkkbzvlju1zmr6rcko+sbhmbpomfd/2mxw=)));$_aes = new aes(mk2x82el6jkkbzvlju1zmr6rcko+sbhmbpomfd/2mxw=);//echo =================
;$ret = $_aes->encrypt(1234567890abcdef1234567890abcdefaaafdsfsdffasfasfasfasdf);echo $ret;var_dump($_aes->decrypt($ret));?>
blocksize = $blocksize; } public function pad($a) { $c = $this->blocksize-count($a)%$this->blocksize; for ($i=0;$iblocksize; if ($c!=0) throw new exception(pkcs#5::unpad: bytearray.length isn't a multiple of the blocksize); $c = $a[$len-1]; array_splice($a,$len-$c,$c); return $a; } public function setblocksize($bs) { $this->blocksize = $bs; }}?>
_tempbyte = array(); $this->_statebyte = array(); $this->_keylength = count($key); $this->_keybyte = $key; $this->expandkey(); } // produce nb bytes for each round private function expandkey() { $tmp0=0; $tmp1=0; $tmp2=0; $tmp3=0; $tmp4=0; $idx=0; $nk = $this->_keylength/4; //echo(count:.$nk.
.count($this->_keybyte).
); $this->_nnr = $nk+6; $_keybyte = $this->_keybyte; $_nnr = $this->_nnr; $nb = aeskeyinclude::$nb; $sbox = aeskeyinclude::$_sbox; $rcon = aeskeyinclude::$_rcon; for( $idx = $nk; $idx 6 && $idx % $nk == 4 ) { $tmp0 = $sbox[$tmp0]; $tmp1 = $sbox[$tmp1]; $tmp2 = $sbox[$tmp2]; $tmp3 = $sbox[$tmp3]; } $_keybyte[4*$idx+0] = $_keybyte[4*$idx - 4*$nk + 0] ^ $tmp0; $_keybyte[4*$idx+1] = $_keybyte[4*$idx - 4*$nk + 1] ^ $tmp1; $_keybyte[4*$idx+2] = $_keybyte[4*$idx - 4*$nk + 2] ^ $tmp2; $_keybyte[4*$idx+3] = $_keybyte[4*$idx - 4*$nk + 3] ^ $tmp3; } $this->_keybyte = $_keybyte; } public function getblocksize() { return 16; } // encrypt one 128 bit block public function encrypt($block, $index=0) { $_statebyte = &$this->_statebyte; $_keybyte = &$this->_keybyte; $nb = aeskeyinclude::$nb; $_nnr = $this->_nnr; $_statebyte = array(); $_statebyte = array_merge($_statebyte,array_slice($block,$index,$nb*4)); $this->addroundkey($_keybyte, 0); for ( $round = 1; $round mixsubcolumns(); } else { $this->shiftrows(); } $this->addroundkey($_keybyte, $round * $nb * 4); } return $_statebyte; } public function decrypt($block, $index=0) { $_statebyte = &$this->_statebyte; $_keybyte = &$this->_keybyte; $nb = aeskeyinclude::$nb; $_nnr = $this->_nnr; $_statebyte = array(); $_statebyte = array_merge($_statebyte,array_slice($block,$index,$nb*4)); $this->addroundkey($_keybyte, $_nnr*$nb*4); $this->invshiftrows(); for( $round = $_nnr; $round--; ) { $this->addroundkey( $_keybyte, $round*$nb*4); if ($round) { $this->invmixsubcolumns(); } } return $_statebyte; } public function dispose() { } // exchanges columns in each of 4 rows // row0 - unchanged, row1- shifted left 1, // row2 - shifted left 2 and row3 - shifted left 3 protected function shiftrows() { $tmp = 0; $_statebyte = &$this->_statebyte; $sbox = aeskeyinclude::$_sbox; // just substitute row 0 $_statebyte[0] = $sbox[$_statebyte[0]]; $_statebyte[4] = $sbox[$_statebyte[4]]; $_statebyte[8] = $sbox[$_statebyte[8]]; $_statebyte[12] = $sbox[$_statebyte[12]]; // rotate row 1 $tmp = $sbox[$_statebyte[1]]; $_statebyte[1] = $sbox[$_statebyte[5]]; $_statebyte[5] = $sbox[$_statebyte[9]]; $_statebyte[9] = $sbox[$_statebyte[13]]; $_statebyte[13] = $tmp; // rotate row 2 $tmp = $sbox[$_statebyte[2]]; $_statebyte[2] = $sbox[$_statebyte[10]]; $_statebyte[10] = $tmp; $tmp = $sbox[$_statebyte[6]]; $_statebyte[6] = $sbox[$_statebyte[14]]; $_statebyte[14] = $tmp; // rotate row 3 $tmp = $sbox[$_statebyte[15]]; $_statebyte[15] = $sbox[$_statebyte[11]]; $_statebyte[11] = $sbox[$_statebyte[7]]; $_statebyte[7] = $sbox[$_statebyte[3]]; $_statebyte[3] = $tmp; } // restores columns in each of 4 rows // row0 - unchanged, row1- shifted right 1, // row2 - shifted right 2 and row3 - shifted right 3 protected function invshiftrows () { $tmp = 0; $_statebyte = $this->_statebyte; $invsbox = aeskeyinclude::$_invsbox; // restore row 0 $_statebyte[0] = $invsbox[$_statebyte[0]]; $_statebyte[4] = $invsbox[$_statebyte[4]]; $_statebyte[8] = $invsbox[$_statebyte[8]]; $_statebyte[12] = $invsbox[$_statebyte[12]]; // restore row 1 $tmp = $invsbox[$_statebyte[13]]; $_statebyte[13] = $invsbox[$_statebyte[9]]; $_statebyte[9] = $invsbox[$_statebyte[5]]; $_statebyte[5] = $invsbox[$_statebyte[1]]; $_statebyte[1] = $tmp; // restore row 2 $tmp = $invsbox[$_statebyte[2]]; $_statebyte[2] = $invsbox[$_statebyte[10]]; $_statebyte[10] = $tmp; $tmp = $invsbox[$_statebyte[6]]; $_statebyte[6] = $invsbox[$_statebyte[14]]; $_statebyte[14] = $tmp; // restore row 3 $tmp = $invsbox[$_statebyte[3]]; $_statebyte[3] = $invsbox[$_statebyte[7]]; $_statebyte[7] = $invsbox[$_statebyte[11]]; $_statebyte[11] = $invsbox[$_statebyte[15]]; $_statebyte[15] = $tmp; $this->_statebyte = $_statebyte; } // recombine and mix each row in a column protected function mixsubcolumns () { $_tempbyte = array();//.length=0; $xtime2sbox = aeskeyinclude::$_xtime2sbox; $xtime3sbox = aeskeyinclude::$_xtime3sbox; $_statebyte = &$this->_statebyte; $sbox = aeskeyinclude::$_sbox; // mixing column 0 $_tempbyte[0] = $xtime2sbox[$_statebyte[0]] ^ $xtime3sbox[$_statebyte[5]] ^ $sbox[$_statebyte[10]] ^ $sbox[$_statebyte[15]]; $_tempbyte[1] = $sbox[$_statebyte[0]] ^ $xtime2sbox[$_statebyte[5]] ^ $xtime3sbox[$_statebyte[10]] ^ $sbox[$_statebyte[15]]; $_tempbyte[2] = $sbox[$_statebyte[0]] ^ $sbox[$_statebyte[5]] ^ $xtime2sbox[$_statebyte[10]] ^ $xtime3sbox[$_statebyte[15]]; $_tempbyte[3] = $xtime3sbox[$_statebyte[0]] ^ $sbox[$_statebyte[5]] ^ $sbox[$_statebyte[10]] ^ $xtime2sbox[$_statebyte[15]]; // mixing column 1 $_tempbyte[4] = $xtime2sbox[$_statebyte[4]] ^ $xtime3sbox[$_statebyte[9]] ^ $sbox[$_statebyte[14]] ^ $sbox[$_statebyte[3]]; $_tempbyte[5] = $sbox[$_statebyte[4]] ^ $xtime2sbox[$_statebyte[9]] ^ $xtime3sbox[$_statebyte[14]] ^ $sbox[$_statebyte[3]]; $_tempbyte[6] = $sbox[$_statebyte[4]] ^ $sbox[$_statebyte[9]] ^ $xtime2sbox[$_statebyte[14]] ^ $xtime3sbox[$_statebyte[3]]; $_tempbyte[7] = $xtime3sbox[$_statebyte[4]] ^ $sbox[$_statebyte[9]] ^ $sbox[$_statebyte[14]] ^ $xtime2sbox[$_statebyte[3]]; // mixing column 2 $_tempbyte[8] = $xtime2sbox[$_statebyte[8]] ^ $xtime3sbox[$_statebyte[13]] ^ $sbox[$_statebyte[2]] ^ $sbox[$_statebyte[7]]; $_tempbyte[9] = $sbox[$_statebyte[8]] ^ $xtime2sbox[$_statebyte[13]] ^ $xtime3sbox[$_statebyte[2]] ^ $sbox[$_statebyte[7]]; $_tempbyte[10] = $sbox[$_statebyte[8]] ^ $sbox[$_statebyte[13]] ^ $xtime2sbox[$_statebyte[2]] ^ $xtime3sbox[$_statebyte[7]]; $_tempbyte[11] = $xtime3sbox[$_statebyte[8]] ^ $sbox[$_statebyte[13]] ^ $sbox[$_statebyte[2]] ^ $xtime2sbox[$_statebyte[7]]; // mixing column 3 $_tempbyte[12] = $xtime2sbox[$_statebyte[12]] ^ $xtime3sbox[$_statebyte[1]] ^ $sbox[$_statebyte[6]] ^ $sbox[$_statebyte[11]]; $_tempbyte[13] = $sbox[$_statebyte[12]] ^ $xtime2sbox[$_statebyte[1]] ^ $xtime3sbox[$_statebyte[6]] ^ $sbox[$_statebyte[11]]; $_tempbyte[14] = $sbox[$_statebyte[12]] ^ $sbox[$_statebyte[1]] ^ $xtime2sbox[$_statebyte[6]] ^ $xtime3sbox[$_statebyte[11]]; $_tempbyte[15] = $xtime3sbox[$_statebyte[12]] ^ $sbox[$_statebyte[1]] ^ $sbox[$_statebyte[6]] ^ $xtime2sbox[$_statebyte[11]]; /* _statebyte.position=0; _statebyte.writebytes(_tempbyte, 0, nb*4);*/ $_statebyte = $_tempbyte; $this->_tempbyte = $_tempbyte; } // restore and un-mix each row in a column protected function invmixsubcolumns () { $_tempbyte = array();//.length=0; $_statebyte = &$this->_statebyte; $xtimee = aeskeyinclude::$_xtimee; $xtimeb = aeskeyinclude::$_xtimeb; $xtime9 = aeskeyinclude::$_xtime9; $xtimed = aeskeyinclude::$_xtimed; $invsbox = aeskeyinclude::$_invsbox; $nb = aeskeyinclude::$nb; // restore column 0 $_tempbyte[0] = $xtimee[$_statebyte[0]] ^ $xtimeb[$_statebyte[1]] ^ $xtimed[$_statebyte[2]] ^ $xtime9[$_statebyte[3]]; $_tempbyte[5] = $xtime9[$_statebyte[0]] ^ $xtimee[$_statebyte[1]] ^ $xtimeb[$_statebyte[2]] ^ $xtimed[$_statebyte[3]]; $_tempbyte[10] = $xtimed[$_statebyte[0]] ^ $xtime9[$_statebyte[1]] ^ $xtimee[$_statebyte[2]] ^ $xtimeb[$_statebyte[3]]; $_tempbyte[15] = $xtimeb[$_statebyte[0]] ^ $xtimed[$_statebyte[1]] ^ $xtime9[$_statebyte[2]] ^ $xtimee[$_statebyte[3]]; // restore column 1 $_tempbyte[4] = $xtimee[$_statebyte[4]] ^ $xtimeb[$_statebyte[5]] ^ $xtimed[$_statebyte[6]] ^ $xtime9[$_statebyte[7]]; $_tempbyte[9] = $xtime9[$_statebyte[4]] ^ $xtimee[$_statebyte[5]] ^ $xtimeb[$_statebyte[6]] ^ $xtimed[$_statebyte[7]]; $_tempbyte[14] = $xtimed[$_statebyte[4]] ^ $xtime9[$_statebyte[5]] ^ $xtimee[$_statebyte[6]] ^ $xtimeb[$_statebyte[7]]; $_tempbyte[3] = $xtimeb[$_statebyte[4]] ^ $xtimed[$_statebyte[5]] ^ $xtime9[$_statebyte[6]] ^ $xtimee[$_statebyte[7]]; // restore column 2 $_tempbyte[8] = $xtimee[$_statebyte[8]] ^ $xtimeb[$_statebyte[9]] ^ $xtimed[$_statebyte[10]] ^ $xtime9[$_statebyte[11]]; $_tempbyte[13] = $xtime9[$_statebyte[8]] ^ $xtimee[$_statebyte[9]] ^ $xtimeb[$_statebyte[10]] ^ $xtimed[$_statebyte[11]]; $_tempbyte[2] = $xtimed[$_statebyte[8]] ^ $xtime9[$_statebyte[9]] ^ $xtimee[$_statebyte[10]] ^ $xtimeb[$_statebyte[11]]; $_tempbyte[7] = $xtimeb[$_statebyte[8]] ^ $xtimed[$_statebyte[9]] ^ $xtime9[$_statebyte[10]] ^ $xtimee[$_statebyte[11]]; // restore column 3 $_tempbyte[12] = $xtimee[$_statebyte[12]] ^ $xtimeb[$_statebyte[13]] ^ $xtimed[$_statebyte[14]] ^ $xtime9[$_statebyte[15]]; $_tempbyte[1] = $xtime9[$_statebyte[12]] ^ $xtimee[$_statebyte[13]] ^ $xtimeb[$_statebyte[14]] ^ $xtimed[$_statebyte[15]]; $_tempbyte[6] = $xtimed[$_statebyte[12]] ^ $xtime9[$_statebyte[13]] ^ $xtimee[$_statebyte[14]] ^ $xtimeb[$_statebyte[15]]; $_tempbyte[11] = $xtimeb[$_statebyte[12]] ^ $xtimed[$_statebyte[13]] ^ $xtime9[$_statebyte[14]] ^ $xtimee[$_statebyte[15]]; for( $i=0; $i _statebyte; for( $idx = 0; $idx _keylength); }}?>
_key = $key; if ($padding == null) { $padding = new pkcs5($key->getblocksize()); } else { $padding->setblocksize($key->getblocksize()); } $this->_padding = $padding; } public function getblocksize() { return $this->_key->getblocksize(); } public function encrypt($src) { $src = $this->_padding->pad($src); $blocksize = $this->_key->getblocksize(); $dst = array(); $len = count($src); for ($i=0;$i_key->encrypt($tmp); $dst = array_merge($dst,$ret); } return $dst; } public function decrypt($src) { $blocksize = $this->_key->getblocksize(); $len = count($src); // sanity check. if ($len % $blocksize!=0) { throw new exception(ecb mode cipher length must be a multiple of blocksize .$blocksize); } $tmp = array(); $dst = array(); for ($i=0;$i_key->decrypt($tmp); $dst = array_merge($dst,$ret); } $dst = $this->_padding->unpad($dst); return $dst; } public function dispose() { } public function tostring() { return $this->_key->tostring().-ecb; }}?>




其它类似信息

推荐信息