当前位置: 首页 > 图文教程 > 网络编程 > PHP > php中3des加密(完全与.net中的兼容)

PHP
搜索和替换文件或目录的一个好类--很实用
树型结构列出指定目录里所有文件的PHP类
使用字符串函数输出整数化的PHP版本号
php录入页面中动态从数据库中提取数据的实现
定制404错误页面,并发信给管理员的程序
让你的PHP同时支持GIF、png、JPEG
一个颜色轮换的简单例子
二十行语句实现从Excel到mysql的转化
模仿OSO的论坛(四)
简体中文转换为繁体中文的PHP函数
繁体中文转换为简体中文的PHP函数
PHP安装攻略:常见问题解答(三)
基于数据库的在线人数,日访问量等统计
NO3第三帝国留言簿制作过程
一个没有MYSQL数据库支持的简易留言本的编写
PHP安装攻略:常见问题解答(二)
在windows iis5下安装php4.0+mysql之我见
PHP聊天室技术
利用PHP实现与ASP Banner组件相似的类
PHP安装攻略:常见问题解答(一)

PHP 中的 php中3des加密(完全与.net中的兼容)


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-28   浏览: 319 ::
收藏到网摘: n/a

php中3des加密的结果与.Net/java不同的帖子与话题实在是太多了,我前不久也在倒腾这些,不过今天已经搞定了,完全与.net中的兼容

01.<?php

02.class Crypt3Des

03.{

04.private $key = "";

05.private $iv = "";

06./**

07.* 构造,传递二个已经进行base64_encode的KEY与IV

08.*

09.* @param string $key

10.* @param string $iv

11.*/

12.function __construct ($key, $iv)

13.{

14.if (empty($key) || empty($iv)) {

15.echo 'key and iv is not valid';

16.exit();

17.}

18.$this->key = $key;

19.$this->iv = $iv;

20.}

21./**

22.*加密

23.* @param <type> $value

24.* @return <type>

25.*/

26.public function encrypt ($value)

27.{

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

29.$iv = base64_decode($this->iv);

30.$value = $this->PaddingPKCS7($value);

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

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

33.$ret = base64_encode(mcrypt_generic($td, $value));

34.mcrypt_generic_deinit($td);

35.mcrypt_module_close($td);

36.return $ret;

37.}

38./**

39.*解密

40.* @param <type> $value

41.* @return <type>

42.*/

43.public function decrypt ($value)

44.{

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

46.$iv = base64_decode($this->iv);

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

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

49.$ret = trim(mdecrypt_generic($td, base64_decode($value)));

50.$ret = $this->UnPaddingPKCS7($ret);

51.mcrypt_generic_deinit($td);

52.mcrypt_module_close($td);

53.return $ret;

54.}

55.private function PaddingPKCS7 ($data)

56.{

57.$block_size = mcrypt_get_block_size('tripledes', 'cbc');

58.$padding_char = $block_size - (strlen($data) % $block_size);

59.$data .= str_repeat(chr($padding_char), $padding_char);

60.return $data;

61.}

62.private function UnPaddingPKCS7 ($text)

63.{

64.$pad = ord($text{strlen($text) - 1});

65.if ($pad > strlen($text)) {

66.return false;

67.}

68.if (strspn($text, chr($pad), strlen($text) - $pad) != $pad) {

69.return false;

70.}

71.return substr($text, 0, - 1 * $pad);

72.}

73.}

74.?>