PHP中加密解密函数与DES加密解密实例


Posted in PHP onOctober 17, 2014

本文实例讲述了PHP中加密解密函数与DES加密解密的应用,分享给大家供大家参考。具体如下:

例子,php加密解密的例子

加密函数:

/*

*功能:对字符串进行加密处理

*参数一:需要加密的内容

*参数二:密钥

*/

function passport_encrypt($str,$key){ //加密函数

 srand((double)microtime() * 1000000);

 $encrypt_key=md5(rand(0, 32000));

 $ctr=0;

 $tmp='';

 for($i=0;$i<strlen($str);$i++){

  $ctr=$ctr==strlen($encrypt_key)?0:$ctr;

  $tmp.=$encrypt_key[$ctr].($str[$i] ^ $encrypt_key[$ctr++]);

 }

 return base64_encode(passport_key($tmp,$key));

}

解密代码如下:

/*

*功能:对字符串进行解密处理

*参数一:需要解密的密文

*参数二:密钥

*/

function passport_decrypt($str,$key){ //解密函数

 $str=passport_key(base64_decode($str),$key);

 $tmp='';

 for($i=0;$i<strlen($str);$i++){

  $md5=$str[$i];

  $tmp.=$str[++$i] ^ $md5;

 }

 return $tmp;

}

辅助函数:
/*

*辅助函数

*/

function passport_key($str,$encrypt_key){

 $encrypt_key=md5($encrypt_key);

 $ctr=0;

 $tmp='';

 for($i=0;$i<strlen($str);$i++){

  $ctr=$ctr==strlen($encrypt_key)?0:$ctr;

  $tmp.=$str[$i] ^ $encrypt_key[$ctr++];

 }

 return $tmp;

}

使用如下所示
$str='作者:3water.com';

$key='123456';

$encrypt=passport_encrypt($str,$key);

$decrypt=passport_decrypt($encrypt,$key);

echo '原文:',$str."<br><hr>";

echo '密文:',$encrypt."<br><hr>";

echo '译文:',$decrypt."<br><hr>";

DES加密解密函数具体代码如下:
<?php

class DES

{

 var $key;

 var $iv; //偏移量

 

 function DES( $key, $iv=0 ) {

 //key长度8例如:1234abcd

  $this->key = $key;

  if( $iv == 0 ) {

   $this->iv = $key;

  } else {

   $this->iv = $iv; //mcrypt_create_iv ( mcrypt_get_block_size (MCRYPT_DES, MCRYPT_MODE_CBC), MCRYPT_DEV_RANDOM );

  }

 }

 

 function encrypt($str) {

 //加密,返回大写十六进制字符串

  $size = mcrypt_get_block_size ( MCRYPT_DES, MCRYPT_MODE_CBC );

  $str = $this->pkcs5Pad ( $str, $size );

  return strtoupper( bin2hex( mcrypt_cbc(MCRYPT_DES, $this->key, $str, MCRYPT_ENCRYPT, $this->iv ) ) );

 }

 

 function decrypt($str) {

 //解密

  $strBin = $this->hex2bin( strtolower( $str ) );

  $str = mcrypt_cbc( MCRYPT_DES, $this->key, $strBin, MCRYPT_DECRYPT, $this->iv );

  $str = $this->pkcs5Unpad( $str );

  return $str;

 }

 

 function hex2bin($hexData) {

  $binData = "";

  for($i = 0; $i < strlen ( $hexData ); $i += 2) {

   $binData .= chr ( hexdec ( substr ( $hexData, $i, 2 ) ) );

  }

  return $binData;

 }

 

 function pkcs5Pad($text, $blocksize) {

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

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

 }

 

 function pkcs5Unpad($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 );

 }

}

?>

以下是测试结果:
$str = '12345678';

$key = '1234abcd';

$crypt = new DES($key);

$mstr = $crypt->encrypt($str);

$str = $crypt->decrypt($mstr);

echo  $str.' <=> '.$mstr;

例子2

代码如下:

/**

*加密需通过get方式在url中传递的参数

*/

function args_encode($data) {

if(is_array($data)) {

$string = http_build_query($data);

return base64_encode($string);

} else {

return false;

}

}
/**

*获取url中get方式传递的参数

*/

function getargs() {

$string = base64_decode($_GET['args']);

parse_str($string,$g);

return $g;

}
PHP 相关文章推荐
Wordpress php 分页代码
Oct 21 PHP
php使用mkdir创建多级目录入门例子
May 10 PHP
php实现httpRequest的方法
Mar 13 PHP
ThinkPHP中Common/common.php文件常用函数功能分析
May 20 PHP
PHP读取大文件末尾N行的高效方法推荐
Jun 03 PHP
PHP+mysql实现从数据库获取下拉树功能示例
Jan 06 PHP
微信开发之获取JSAPI TICKET
Jul 07 PHP
PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】
Nov 14 PHP
PDO::exec讲解
Jan 28 PHP
php微信分享到朋友圈、QQ、朋友、微博
Feb 18 PHP
Laravel等框架模型关联的可用性浅析
Dec 15 PHP
Laravel框架数据库迁移操作实例详解
Apr 06 PHP
php实现过滤表单提交中html标签的方法
Oct 17 #PHP
php生成xml时添加CDATA标签的方法
Oct 17 #PHP
php输出xml必须header的解决方法
Oct 17 #PHP
php生成百度sitemap站点地图类函数实例
Oct 17 #PHP
php+mysql实现数据库随机重排实例
Oct 17 #PHP
php中spl_autoload详解
Oct 17 #PHP
php中__destruct与register_shutdown_function执行的先后顺序问题
Oct 17 #PHP
You might like
PHP 创建文件(文件夹)以及目录操作代码
2010/03/04 PHP
在wamp集成环境下升级php版本(实现方法)
2013/07/01 PHP
PHP采用XML-RPC构造Web Service实例教程
2014/07/16 PHP
PHP中生成UUID自定义函数分享
2015/06/10 PHP
javascript 添加和移除函数的通用方法
2009/10/20 Javascript
js change,propertychange,input事件小议
2011/12/20 Javascript
js监控IE火狐浏览器关闭、刷新、回退、前进事件
2014/07/23 Javascript
JavaScript异步加载浅析
2014/12/28 Javascript
JS实现太极旋转思路分析
2016/12/09 Javascript
JavaScript中的 attribute 和 jQuery中的 attr 方法浅析
2017/01/04 Javascript
微信小程序 支付简单实例及注意事项
2017/01/06 Javascript
vue2.0数据双向绑定与表单bootstrap+vue组件
2017/02/27 Javascript
jquery 禁止鼠标右键并监听右键事件
2017/04/27 jQuery
jQuery实现导航栏头部菜单项点击后变换颜色的方法
2017/07/19 jQuery
详解JS中的this、apply、call、bind(经典面试题)
2017/09/19 Javascript
Vue-cli-webpack搭建斗鱼直播步骤详解
2017/11/17 Javascript
webstorm中vue语法的支持详解
2018/05/09 Javascript
JavaScript JMap类定义与使用方法示例
2019/01/22 Javascript
vue 点击展开显示更多(点击收起部分隐藏)
2019/04/09 Javascript
JavaScript遍历查找数组中最大值与最小值的方法示例
2019/05/24 Javascript
微信小程序swiper禁止用户手动滑动代码实例
2019/08/23 Javascript
微信小程序利用button控制条件标签的变量问题
2020/03/15 Javascript
跟老齐学Python之做一个小游戏
2014/09/28 Python
python分析apache访问日志脚本分享
2015/02/26 Python
Numpy 将二维图像矩阵转换为一维向量的方法
2018/06/05 Python
详解python中的装饰器
2018/07/10 Python
python实现抖音点赞功能
2019/04/07 Python
Python综合应用名片管理系统案例详解
2020/01/03 Python
Speedo美国:澳大利亚顶尖泳衣制造商
2016/08/03 全球购物
有机童装:Toby Tiger
2018/05/23 全球购物
顶岗实习计划书
2014/01/10 职场文书
卫校中专生的自我评价
2014/01/15 职场文书
优秀求职信范文分享
2014/01/26 职场文书
暑期培训心得体会
2014/09/02 职场文书
2015年汽车销售工作总结
2015/04/07 职场文书
mysql中DCL常用的用户和权限控制
2022/03/31 MySQL