php 3des mac,PHP版3DES加解密类

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

/**

*

* PHP版3DES加解密类

*

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

*

* @Author:蓝凤(ilanfeng.com)

*

* @version: V0.1 2011.02.18

*

*/

class Cc3des{

//加密的时候只用替换key就行了,ecb模式不需要提供iv值

public $key = "xxxxxxxxx";

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

//解密

public function decrypt($string) {

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

srand();

$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);

$key = substr($this->key, 0, mcrypt_enc_get_key_size($td));

mcrypt_generic_init($td, $key, $iv);

$value = @pack("H*", $string);

$ret = trim(mdecrypt_generic($td, $value));

// 去掉多余的补位

$ret = $this->pkcs5_unpad($ret);

mcrypt_generic_deinit($td);

mcrypt_module_close($td);

return $ret;

}

//加密

public function encrypt($value) {

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

srand();

$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);

$key = substr($this->key, 0, mcrypt_enc_get_key_size($td));

mcrypt_generic_init($td, $key, $iv);

$value = $this->pkcs5_pad($value, mcrypt_get_block_size(MCRYPT_3DES, 'ecb'));

$ret = mcrypt_generic($td, $value);

mcrypt_generic_deinit($td);

mcrypt_module_close($td);

return strtoupper(bin2hex($ret));

}

/*

* 位数补齐

*/

private function pkcs5_pad($text, $blocksize) {

$pad = $blocksize - (strlen($text) % $blocksize);

return $text . str_repeat(chr($pad), $pad);

}

/*

* 去除补位

*/

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

}

}

?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值