java与php互通des,Java对接使用到了des加密,在网上找到一个php版本

436525

之前和Java对接使用到了des加密,在网上找到一个php版本,经过测试没问题。key = $key;}function encrypt($input){ $size = mcrypt_get_block_size('des', 'ecb'); $input = $this->pkcs5_pad($input, $size); $key = $this->key; $td = mcrypt_module_open('des', '', 'ecb', ''); $iv = @mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND); @mcrypt_generic_init($td, $key, $iv); $data = mcrypt_generic($td, $input); mcrypt_generic_deinit($td); mcrypt_module_close($td); $data = $this->byteArr2HexStr($this->getBytes($data)); return $data;}function decrypt($encrypted){ $encrypted = $this->array2str($this->hexStr2ByteArr($encrypted)); $key =$this->key; $td = mcrypt_module_open('des','','ecb',''); //使用MCRYPT_DES算法,cbc模式 $iv = @mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND); $ks = mcrypt_enc_get_key_size($td); @mcrypt_generic_init($td, $key, $iv); //初始处理 $decrypted = mdecrypt_generic($td, $encrypted); //解密 mcrypt_generic_deinit($td); //结束 mcrypt_module_close($td); $y=$this->pkcs5_unpad($decrypted); return $y;}function pkcs5_pad ($text, $blocksize){ $pad = $blocksize - (strlen($text) % $blocksize); return $text . str_repeat(chr($pad), $pad);}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);}/*** 将字符串转换为ASCII码值数组,和array2str 互为可逆的转换过程** @param string需要转换的字符串* @return 转换后的ASCII码值数组*/function getBytes($string){ $bytes = array(); for($i = 0; $i $value) { $string .= chr($value); } return $string;}/*** 将数组转换为表示16进制值的字符串,和hexStr2ByteArr(String strIn) 互为可逆的转换过程*** @param array需要转换的byte数组* @return 转换后的字符串*/public function byteArr2HexStr($array){ $iLen = count($array); $return_str = ''; for ($i = 0; $i var $key; function des_class($key) { $this->key = $key;} function encrypt($input) { $size = mcrypt_get_block_size('des', 'ecb'); $input = $this->pkcs5_pad($input, $size); $key = $this->key; $td = mcrypt_module_open('des', '', 'ecb', ''); $iv = @mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND); @mcrypt_generic_init($td, $key, $iv); $data = mcrypt_generic($td, $input); mcrypt_generic_deinit($td); mcrypt_module_close($td); $data = $this->byteArr2HexStr($this->getBytes($data)); return $data;} function decrypt($encrypted) { $encrypted = $this->array2str($this->hexStr2ByteArr($encrypted)); $key =$this->key; $td = mcrypt_module_open('des','','ecb',''); //使用MCRYPT_DES算法,cbc模式 $iv = @mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND); $ks = mcrypt_enc_get_key_size($td); @mcrypt_generic_init($td, $key, $iv); //初始处理 $decrypted = mdecrypt_generic($td, $encrypted); //解密www.rcsx.org mcrypt_generic_deinit($td); //结束 mcrypt_module_close($td); $y=$this->pkcs5_unpad($decrypted); return $y;} function pkcs5_pad ($text, $blocksize) { $pad = $blocksize - (strlen($text) % $blocksize); return $text . str_repeat(chr($pad), $pad);} 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);} /*** 将字符串转换为ASCII码值数组,和array2str 互为可逆的转换过程** @param string需要转换的字符串* @return 转换后的ASCII码值数组*/ function getBytes($string) { $bytes = array(); for($i = 0; $i return $bytes;} /*** 将ASCII码值数组转换为字符串,和getBytes 互为可逆的转换过程** @param $array需要转换的ASCII码值数组* @return 转换后的字符串*/ function array2str($array) { $string = ''; foreach ($array as $key => $value) { $string .= www.rcsx.org chr($value); } return $string;} /*** 将数组转换为表示16进制值的字符串,和hexStr2ByteArr(String strIn) 互为可逆的转换过程*** @param array需要转换的byte数组* @return 转换后的字符串*/ public function byteArr2HexStr($array) { $iLen = count($array); $return_str = ''; for ($i = 0; $i // 把负数转换为正数 while ($intTmp 0) { $intTmp = $intTmp + 256; } $intTmp = dechex($intTmp); // 小于0F的数需要在前面补0 if(hexdec($intTmp) 16) { $intTmp = '0' . $intTmp; } $return_str = $return_str . $intTmp; } return $return_str;} /*** 将表示16进制值的字符串转换为数组, 和byteArr2HexStr互为可逆的转换过程** @param $string 需要转换的字符串* @return 转换后的数组*/ public function hexStr2ByteArr($string) { $len = strlen($string); $return = array(); for($i=0;$i2) { $return[] = hexdec(substr($string,$i,2)); } return $return;}}

09-18 12:59

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值