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 相关文章推荐
第十二节 类的自动加载 [12]
Oct 09 PHP
PHP 文件上传进度条的两种实现方法的代码
Nov 25 PHP
php 应用程序安全防范技术研究
Sep 25 PHP
Windows中使用计划任务自动执行PHP程序实例
May 09 PHP
php从字符串创建函数的方法
Mar 16 PHP
php实现XSS安全过滤的方法
Jul 29 PHP
PHP框架Laravel学习心得体会
Oct 28 PHP
在openSUSE42.1下编译安装PHP7 的方法
Dec 24 PHP
PHP实时统计中文字数和区别
Feb 28 PHP
启用OPCache提高PHP程序性能的方法
Mar 21 PHP
实例说明js脚本语言和php脚本语言的区别
Apr 04 PHP
微信公众平台开发教程②微信端分享功能图文详解
Apr 10 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
重置版宣传动画
2020/04/09 魔兽争霸
杏林同学录(九)
2006/10/09 PHP
php读取EXCEL文件 php excelreader读取excel文件
2012/12/06 PHP
thinkPHP中U方法加密传递参数功能示例
2018/05/29 PHP
PHP命名空间与自动加载类详解
2018/09/04 PHP
js技巧--转义符&quot;\&quot;的妙用
2007/01/09 Javascript
js用图作提交按钮或超连接
2008/03/26 Javascript
childNodes.length与children.length的区别
2009/05/14 Javascript
JavaScript 对象的属性和方法4种不同的类型
2010/03/19 Javascript
javascript中字符串替换函数replace()方法与c# 、vb 替换有一点不同
2010/06/25 Javascript
通过javascript的匿名函数来分析几段简单有趣的代码
2010/06/29 Javascript
深入理解JavaScript定时机制
2010/10/29 Javascript
浅析js预加载/延迟加载
2014/09/25 Javascript
javascript中的this详解
2014/12/08 Javascript
JavaScript使用Max函数返回两个数字中较大数的方法
2015/04/06 Javascript
JS基于面向对象实现的放烟花效果
2015/05/07 Javascript
jQuery使用zTree插件实现树形菜单和异步加载
2016/02/25 Javascript
nodejs实例解析(输出hello world)
2017/01/03 NodeJs
Angular1.x复杂指令实例详解
2017/03/01 Javascript
jQueryMobile之窗体长内容的缺陷与解决方法实例分析
2017/09/20 jQuery
响应式框架Bootstrap栅格系统的实例
2017/12/19 Javascript
JS中DOM元素的attribute与property属性示例详解
2018/09/04 Javascript
angularjs实现table表格td单元格单击变输入框/可编辑状态示例
2019/02/21 Javascript
详解基于Vue/React项目的移动端适配方案
2019/08/23 Javascript
vue $set 给数据赋值的实例
2019/11/09 Javascript
Vue简单封装axios之解决post请求后端接收不到参数问题
2020/02/16 Javascript
Python回调函数用法实例详解
2015/07/02 Python
python创建列表并给列表赋初始值的方法
2015/07/28 Python
Python实现合并两个列表的方法分析
2018/05/28 Python
Python查看微信撤回消息代码
2018/06/07 Python
HTML5标签小集
2011/08/02 HTML / CSS
应届生服装设计自我评价
2013/09/20 职场文书
创业计划书——互联网商机
2014/01/12 职场文书
营销与策划实训报告
2014/11/05 职场文书
养成教育主题班会
2015/08/13 职场文书
作文之亲情600字
2019/09/23 职场文书