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 相关文章推荐
定制404错误页面,并发信给管理员的程序
Oct 09 PHP
PHP操作数组相关函数
Feb 03 PHP
无需重新编译php加入ftp扩展的解决方法
Feb 07 PHP
浅谈php中mysql与mysqli的区别分析
Jun 10 PHP
php截取中文字符串不乱码的方法
Dec 25 PHP
ThinkPHP3.1新特性之对页面压缩输出的支持
Jun 19 PHP
PHP5.3与5.5废弃与过期函数整理汇总
Jul 10 PHP
mysql_escape_string()函数用法分析
Apr 25 PHP
PHP编程获取音频文件时长的方法【基于getid3类】
Apr 20 PHP
php将html转为图片的实现方法
May 19 PHP
Thinkphp 在api开发中异常返回依然是html的解决方式
Oct 16 PHP
PHP实现爬虫爬取图片代码实例
Mar 03 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
建立文件交换功能的脚本(二)
2006/10/09 PHP
PHP daddslashes 使用方法介绍
2012/10/26 PHP
COM中获取JavaScript数组大小的代码
2009/11/22 Javascript
JavaScript几种形式的树结构菜单
2010/05/10 Javascript
基于jquery的仿百度搜索框效果代码
2011/04/11 Javascript
{}与function(){}选用空对象{}来存放keyValue
2012/05/23 Javascript
弹出窗口并且此窗口带有半透明的遮罩层效果
2014/03/13 Javascript
javascript排序函数实现数字排序
2015/06/26 Javascript
跟我学习javascript的异步脚本加载
2015/11/20 Javascript
javascript实现保留两位小数的多种方法
2015/12/18 Javascript
pc加载更多功能和移动端下拉刷新加载数据
2016/11/07 Javascript
angularJS深拷贝详解
2017/03/23 Javascript
使用Xcache缓存器加速PHP网站的配置方法
2017/04/22 Javascript
基于JSON数据格式详解
2017/08/31 Javascript
微信小程序之页面跳转和参数传递的实现
2017/09/29 Javascript
解决Jstree 选中父节点时被禁用的子节点也会选中的问题
2017/12/27 Javascript
Angular4学习之Angular CLI的安装与使用教程
2018/01/04 Javascript
CSS3 动画卡顿性能优化的完美解决方案
2018/09/20 Javascript
使用webpack4编译并压缩ES6代码的方法示例
2019/04/24 Javascript
微信小程序获取当前位置和城市名
2019/11/13 Javascript
通过代码实例展示Python中列表生成式的用法
2015/03/31 Python
浅谈Python中的数据类型
2015/05/05 Python
Python 的描述符 descriptor详解
2016/02/27 Python
Python写的一个定时重跑获取数据库数据
2016/12/28 Python
python 实现判断ip连通性的方法总结
2018/04/22 Python
Python3爬取英雄联盟英雄皮肤大图实例代码
2018/11/14 Python
python怎么判断素数
2020/07/01 Python
利用Python如何画一颗心、小人发射爱心
2021/02/21 Python
ProBikeKit新西兰:自行车套件,跑步和铁人三项装备
2017/04/05 全球购物
复古服装:RetroStage
2019/05/10 全球购物
初中三好学生自我鉴定
2014/04/07 职场文书
建筑结构施工求职信
2014/07/11 职场文书
简单通用的简历自我评价
2014/09/21 职场文书
党小组鉴定意见
2015/06/02 职场文书
新闻通讯稿模板
2015/07/22 职场文书
mysql函数全面总结
2021/11/11 MySQL