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 相关文章推荐
使用MaxMind 根据IP地址对访问者定位
Oct 09 PHP
一段防盗连的PHP代码
Dec 06 PHP
PHP 编写大型网站问题集
May 07 PHP
PHP 调试工具Debug Tools
Apr 30 PHP
如何用php生成扭曲及旋转的验证码图片
Jun 07 PHP
Smarty变量调节器失效的解决办法
Aug 20 PHP
php的GD库imagettftext函数解决中文乱码问题
Jan 24 PHP
win7系统配置php+Apache+mysql环境的方法
Aug 21 PHP
PHP实现的策略模式简单示例
Aug 25 PHP
ThinkPHP实现转换数据库查询结果数据到对应类型的方法
Nov 16 PHP
PHP+Ajax实现上传文件进度条动态显示进度功能
Jun 04 PHP
YII框架实现自定义第三方扩展操作示例
Apr 26 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实现smarty模板无限极分类的方法
2015/12/07 PHP
PHP实现表单提交数据的验证处理功能【防SQL注入和XSS攻击等】
2017/07/21 PHP
JS链式调用的实现方法
2013/03/07 Javascript
输入自动提示搜索提示功能的使用说明:sugggestion.txt
2013/09/02 Javascript
防止jQuery ajax Load使用缓存的方法小结
2014/02/22 Javascript
IE6已终止操作问题的2种情况及解决
2014/04/23 Javascript
vue+ElementUI实现订单页动态添加产品数据效果实例代码
2017/07/13 Javascript
React Native实现地址挑选器功能
2017/10/24 Javascript
JS实现的找零张数最小问题示例
2017/11/28 Javascript
js中的闭包学习心得
2018/02/06 Javascript
Vue 父子组件数据传递的四种方式( inheritAttrs + $attrs + $listeners)
2018/05/04 Javascript
vue两个组件间值的传递或修改方式
2018/07/04 Javascript
浅谈ng-zorro使用心得
2018/12/03 Javascript
详解Vue+elementUI build打包部署后字体图标丢失问题
2020/07/13 Javascript
解决Vue-Router升级导致的Uncaught (in promise)问题
2020/08/07 Javascript
Python  __getattr__与__setattr__使用方法
2008/09/06 Python
Python xlrd读取excel日期类型的2种方法
2015/04/28 Python
django 按时间范围查询数据库实例代码
2018/02/11 Python
python实现简单登陆流程的方法
2018/04/22 Python
在Mac上删除自己安装的Python方法
2018/10/29 Python
Python实现爬取马云的微博功能示例
2019/02/16 Python
python快速编写单行注释多行注释的方法
2019/07/31 Python
使用pyecharts生成Echarts网页的实例
2019/08/12 Python
python每天定时运行某程序代码
2019/08/16 Python
使用python实现画AR模型时序图
2019/11/20 Python
解决jupyter notebook import error但是命令提示符import正常的问题
2020/04/15 Python
Tensorflow中批量读取数据的案列分析及TFRecord文件的打包与读取
2020/06/30 Python
日语翻译个人求职的自我评价
2013/10/14 职场文书
车间统计员岗位职责
2014/01/05 职场文书
拾金不昧的表扬信
2014/01/16 职场文书
党的群众路线整改落实情况汇报
2014/10/28 职场文书
实习介绍信模板
2015/01/30 职场文书
经销商会议开幕词
2016/03/04 职场文书
学校2016年九九重阳节活动总结
2016/04/01 职场文书
某学校的2019年度工作报告范本
2019/10/11 职场文书
六种css3实现的边框过渡效果
2021/04/22 HTML / CSS