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 相关文章推荐
php的一些小问题
Jul 03 PHP
php实现telnet功能示例
Apr 08 PHP
ThinkPHP模板Switch标签用法示例
Jun 30 PHP
PHP中file_exists函数不支持中文名的解决方法
Jul 26 PHP
Yii查询生成器(Query Builder)用法实例教程
Sep 04 PHP
PHP中的多种加密技术及代码示例解析
Oct 20 PHP
php实现水印文字和缩略图的方法示例
Dec 29 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
Aug 28 PHP
ThinkPHP实现的rsa非对称加密类示例
May 29 PHP
Laravel中错误与异常处理的用法示例
Sep 16 PHP
php设计模式之适配器模式实例分析【星际争霸游戏案例】
Apr 07 PHP
TP - 比RBAC更好的权限认证方式(Auth类认证)
Mar 09 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
PHP4实际应用经验篇(2)
2006/10/09 PHP
Ajax+PHP 边学边练之四 表单
2009/11/27 PHP
PHP初学者常见问题集合 修正版(21问答)
2010/03/23 PHP
php中获取关键词及所属来源搜索引擎名称的代码
2011/02/15 PHP
PHP SPL标准库之接口(Interface)详解
2015/05/11 PHP
PHP模板引擎Smarty中变量的使用方法示例
2016/04/11 PHP
dess中一个简单的多路委托的实现
2010/07/20 Javascript
JS中setTimeout()的用法详解
2013/04/14 Javascript
jQuery ui插件的使用方法代码实例
2013/05/08 Javascript
jQuery插件的写法分享
2013/06/12 Javascript
JS之Date对象和获取系统当前时间详解
2014/01/13 Javascript
JavaScript设计模式之单例模式实例
2014/09/24 Javascript
jQuery通过扩展实现抖动效果的方法
2015/03/11 Javascript
jquery实现可自动判断位置的弹出层效果代码
2015/10/12 Javascript
js阻止默认浏览器行为与冒泡行为的实现代码
2016/05/15 Javascript
javascript数组遍历的方法实例分析
2016/09/13 Javascript
浅谈JS封闭函数、闭包、内置对象
2017/07/18 Javascript
深入理解Vue.js源码之事件机制
2017/09/27 Javascript
详解vue项目打包后通过百度的BAE发布到网上的流程
2018/03/05 Javascript
vue中选项卡点击切换且能滑动切换功能的实现代码
2018/11/25 Javascript
vue使用高德地图点击下钻上浮效果的实现思路
2019/10/12 Javascript
js实现简单的随机点名器
2020/09/17 Javascript
[02:17]DOTA2亚洲邀请赛 RAVE战队出场宣传片
2015/02/07 DOTA
Python操作sqlite3快速、安全插入数据(防注入)的实例
2014/04/26 Python
在Python中分别打印列表中的每一个元素方法
2018/11/07 Python
python实现简单五子棋游戏
2019/06/18 Python
pyqt 实现QlineEdit 输入密码显示成圆点的方法
2019/06/24 Python
Django对接支付宝实现支付宝充值金币功能示例
2019/12/17 Python
加拿大票务网站:Ticketmaster加拿大
2017/07/17 全球购物
介绍一下sql server的安全性
2014/08/10 面试题
省三好学生申请材料
2014/01/22 职场文书
护士进修自我鉴定
2014/02/07 职场文书
财务工作失误检讨书
2015/02/19 职场文书
2015年“七七卢沟桥事变”纪念活动总结
2015/03/24 职场文书
python实现Nao机器人的单目测距
2021/09/04 Python
python单向链表实例详解
2022/05/25 Python