3des加密 java php_PHP版3DES加解密类,可与java的3DES(DESede)加密方式兼容

/**

*

* PHP版3DES加解密类

*

* 可与java的3DES(DESede)加密方式兼容

*

* @Author: Luo Hui (farmer.luo at gmail.com)

*

* @version: V0.1 2008.12.04

*

*/

class Crypt3Des

{

public $key = "01234567890123456789012345678912";

public $iv = "23456789"; //like java: private static byte[] myIV = { 50, 51, 52, 53, 54, 55, 56, 57 };

//加密

public function encrypt($input)

{

$input = $this->padding( $input );

$key = base64_decode($this->key);

$td = mcrypt_module_open( MCRYPT_3DES, '', MCRYPT_MODE_CBC, '');

//使用MCRYPT_3DES算法,cbc模式

mcrypt_generic_init($td, $key, $this->iv);

//初始处理

$data = mcrypt_generic($td, $input);

//加密

mcrypt_generic_deinit($td);

//结束

mcrypt_module_close($td);

$data = $this->removeBR(base64_encode($data));

return $data;

}

//解密

public function decrypt($encrypted)

{

$encrypted = base64_decode($encrypted);

$key = base64_decode($this->key);

$td = mcrypt_module_open( MCRYPT_3DES,'',MCRYPT_MODE_CBC,'');

//使用MCRYPT_3DES算法,cbc模式

mcrypt_generic_init($td, $key, $this->iv);

//初始处理

$decrypted = mdecrypt_generic($td, $encrypted);

//解密

mcrypt_generic_deinit($td);

//结束

mcrypt_module_close($td);

$decrypted = $this->removePadding($decrypted);

return $decrypted;

}

//填充密码,填充至8的倍数

public function padding( $str )

{

$len = 8 - strlen( $str ) % 8;

for ( $i = 0; $i < $len; $i++ )

{

$str .= chr( 0 );

}

return $str ;

}

//删除填充符

public function removePadding( $str )

{

$len = strlen( $str );

$newstr = "";

$str = str_split($str);

for ($i = 0; $i < $len; $i++ )

{

if ($str[$i] != chr( 0 ))

{

$newstr .= $str[$i];

}

}

return $newstr;

}

//删除回车和换行

public function removeBR( $str )

{

$len = strlen( $str );

$newstr = "";

$str = str_split($str);

for ($i = 0; $i < $len; $i++ )

{

if ($str[$i] != '\n' and $str[$i] != '\r')

{

$newstr .= $str[$i];

}

}

return $newstr;

}

}

//test

$input = "1qaz2ws";

echo "plainText:" . $input."
";

$crypt = new Crypt3Des();

echo "Encode:".$crypt->encrypt($input)."
";

echo "Decode:".$crypt->decrypt($crypt->encrypt($input));

?>

结果:

plainText:1qaz2ws

Encode:0GsXgYA8BuM=

Decode:1qaz2ws

/**

*@param DES/3DES加密解密

*@param 如果是3des,将MCRYPT_DES修改为MCRYPT_3DES,个人笔记

*/

class DesCrypt{

var $key = '';

var $deviceid = '';

var $user = '';

var $lsh = '';

var $cipherText = '';

var $HcipherText = '';

var $decrypted_data ='';

function DesCrypt(){

}

//加密

function en($str)

{

$cipher = mcrypt_module_open(MCRYPT_DES, '', MCRYPT_MODE_ECB, '');

$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_DES,MCRYPT_MODE_ECB), MCRYPT_RAND);

if (mcrypt_generic_init($cipher, substr($this->key,0,8), $iv) != -1)

{

$this->cipherText = mcrypt_generic($cipher,$this->pad($str));

mcrypt_generic_deinit($cipher);

// 以十六进制字符显示加密后的字符

$this->HcipherText=bin2hex($this->cipherText);

printf("

3DES encrypted:\n%s

",$this->cipherText);

printf("

3DES HexEncrypted:\n%s

",$this->HcipherText);

}

mcrypt_module_close($cipher);

return $this->cipherText;

}

//解密

function de($str)

{

$str = pack('H*', $str);

$cipher = mcrypt_module_open(MCRYPT_DES, '', MCRYPT_MODE_ECB, '');

$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_DES,MCRYPT_MODE_ECB), MCRYPT_RAND);

if (mcrypt_generic_init($cipher, substr($this->key,0,8), $iv) != -1)

{

$this->decrypted_data = mdecrypt_generic($cipher,$str);

mcrypt_generic_deinit($cipher);

}

mcrypt_module_close($cipher);

return $this->unpad($this->decrypted_data);

}

private function pad ($data)

{

$data = str_replace("\n","",$data);

$data = str_replace("\t","",$data);

$data = str_replace("\r","",$data);

return $data;

}

private function 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);

}

};

?>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值