3des php,PHP 3DES加密算法实现

最近需要在做的东西,php返回一个3des加密的url给.net,然后.net端解密。php的实现一直无法和.net端匹配起来,先记在这里,希望看到的大神指点。网上无数照抄照搬的人,根本没有亲身验证过,希望大家以后能够秉承着严谨的方式。

PHP加密扩展库Mcrypt对数据加密和解密之前,首先创建了一个初始化向量,简称为iv。由 $iv = mcrypt_create_iv(mcrypt_get_iv_size($cipher,$modes),MCRYPT_RAND);可见创建初始化 向 量需要两个参数:size指定了iv的大小;source为iv的源,其中值MCRYPT_RAND为系统随机数。

函数mcrypt_get_iv_size($cipher,$modes)返回初始化向量大小,参数cipher和mode分别指算法和加 密模式。

Php代码function encrypt($input){//数据加密

$key=md5("XXXXXXXXX",TRUE);

$key=base64_encode($key);

$size = mcrypt_get_block_size(MCRYPT_3DES,MCRYPT_MODE_ECB);

$input = $this->pkcs5_pad($input, $size);

//$key = str_pad($this->key,24,'0');

$key = str_pad($key,24,'0');

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

// $iv = @mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND);//初始化向量

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

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

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

mcrypt_generic_deinit($td);

mcrypt_module_close($td);

// $data = base64_encode($this->PaddingPKCS7($data));

$data = base64_encode($data);

return $data;

}

Php代码function pkcs5_pad ($text, $blocksize) {

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

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

}

.net侧的代码实现如下:

C#代码var des = new TripleDESCryptoServiceProvider();

var hashMd5 = new MD5CryptoServiceProvider();

des.Key = hashMd5.ComputeHash(Encoding.Default.GetBytes(strKey));

des.Mode = CipherMode.ECB;

des.Padding = PaddingMode.Zeros;

var desEncrypt = des.CreateEncryptor();

var buffer = Encoding.Default.GetBytes(strString);

return Convert.ToBase64String(desEncrypt.TransformFinalBlock(buffer, 0, buffer.Length));

查到了php的另一种实现方式,皆不可。

Php代码function encrypt($string) {

//加密用的密钥文件

$key=md5("XXXXXXXXXXXX",TRUE);

$key=base64_encode($key);

//加密方法

$cipher_alg = MCRYPT_TRIPLEDES;

//初始化向量来增加安全性

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

//开始加密

$encrypted_string = mcrypt_encrypt($cipher_alg, $key, $string, MCRYPT_MODE_ECB, $iv);

return base64_encode($encrypted_string);//转化成16进制

}

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值