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输出控制功能在简繁体转换中的应用
Oct 09 PHP
从php核心代码分析require和include的区别
Jan 02 PHP
php学习笔记 [预定义数组(超全局数组)]
Jun 09 PHP
PHP设计模式之观察者模式(Observer)详细介绍和代码实例
Apr 08 PHP
ThinkPHP提交表单时默认自动转义的解决方法
Nov 25 PHP
PHP通过串口实现发送短信
Jul 08 PHP
分享ThinkPHP3.2中关联查询解决思路
Sep 20 PHP
php通过curl添加cookie伪造登陆抓取数据的方法
Apr 02 PHP
iOS10推送通知开发教程
Sep 19 PHP
PHP类型约束用法示例
Sep 28 PHP
php实例化一个类的具体方法
Sep 19 PHP
PHP使用openssl扩展实现加解密方法示例
Feb 20 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为表单获取的URL 地址预设 http 字符串函数代码
2010/05/26 PHP
PHP代码网站如何防范SQL注入漏洞攻击建议分享
2012/03/01 PHP
使用PHP实现蜘蛛访问日志统计
2013/07/05 PHP
PHP实现图片裁剪、添加水印效果代码
2014/10/01 PHP
PHP使用ob_start生成html页面的方法
2014/11/07 PHP
YII CLinkPager分页类扩展增加显示共多少页
2016/01/29 PHP
Symfony2框架学习笔记之HTTP Cache用法详解
2016/03/18 PHP
PHP信号处理机制的操作代码讲解
2019/04/19 PHP
几个常用的JavaScript字符串处理函数 - split()、join()、substring()和indexOf()
2009/06/02 Javascript
javascript获取鼠标位置部分的实例代码(兼容IE,FF)
2013/08/05 Javascript
JS实现点击按钮获取页面高度的方法
2015/11/02 Javascript
js动态获取子复选项并设计全选及提交的实现方法
2016/06/24 Javascript
js中遍历对象的属性和值的方法
2016/07/27 Javascript
用vue构建多页面应用的示例代码
2017/09/20 Javascript
vue-rx的初步使用教程
2018/09/21 Javascript
详解基于iview-ui的导航栏路径(面包屑)配置
2019/02/22 Javascript
Vue Autocomplete 自动完成功能简单示例
2019/05/25 Javascript
使用vuex存储用户信息到localStorage的实例
2019/11/11 Javascript
jquery获取input输入框中的值
2019/11/13 jQuery
python实现百度关键词排名查询
2014/03/30 Python
Python实现截屏的函数
2015/07/26 Python
TensorFlow Session使用的两种方法小结
2018/07/30 Python
python使用Turtle库绘制动态钟表
2018/11/19 Python
Django 使用easy_thumbnails压缩上传的图片方法
2019/07/26 Python
django执行数据库查询之后实现返回的结果集转json
2020/03/31 Python
python中关于数据类型的学习笔记
2020/07/19 Python
python+selenium实现12306模拟登录的步骤
2021/01/21 Python
世界上最大的售后摩托车零配件超市:J&P Cycles
2017/12/08 全球购物
Elizabeth Gage官网:英国最好的珠宝设计之一
2020/09/26 全球购物
师范大学应届生求职信
2013/11/21 职场文书
运动会通讯稿500字
2014/02/20 职场文书
应急管理培训方案
2014/06/12 职场文书
本科毕业生应聘求职信
2014/07/06 职场文书
授权委托书(法人单位用)
2014/09/29 职场文书
党支部鉴定意见
2015/06/02 职场文书
python基于opencv批量生成验证码的示例
2021/04/28 Python