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 has encountered an Access Violation 错误的解决方法
Jan 17 PHP
同台服务器使用缓存APC效率高于Memcached的演示代码
Feb 16 PHP
一步一步学习PHP(8) php 数组
Mar 05 PHP
Php中文件下载功能实现超详细流程分析
Jun 13 PHP
php中is_null,empty,isset,unset 的区别详细介绍
Apr 28 PHP
php遍历目录与文件夹的多种方法详解
Nov 14 PHP
php抓取并保存网站图片的实现代码
Oct 28 PHP
Ubuntu server 11.04安装memcache及php使用memcache来存储session的方法
May 31 PHP
PHP实现的用户注册表单验证功能简单示例
Feb 25 PHP
PHP简单验证码功能机制实例详解
Mar 27 PHP
php输出控制函数和输出函数生成静态页面
Jun 27 PHP
thinkPHP5.1框架中Request类四种调用方式示例
Aug 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 email邮箱正则
2008/10/08 PHP
PHP结合Jquery和ajax实现瀑布流特效
2016/01/07 PHP
Laravel中log无法写入问题的解决
2017/06/17 PHP
php往mysql中批量插入数据实例教程
2018/12/12 PHP
PHP实现与java 通信的插件使用教程
2019/08/11 PHP
PHP7 参数处理机制修改
2021/03/09 PHP
JavaScript中的16进制字符(改进)
2011/11/21 Javascript
判断文件是否正在被使用的JS代码
2013/12/21 Javascript
JavaScript函数模式详解
2014/11/07 Javascript
JS+CSS实现的拖动分页效果实例
2015/05/11 Javascript
Bootstrap每天必学之日期控制
2016/03/07 Javascript
使用Bootstrap框架制作查询页面的界面实例代码
2016/05/27 Javascript
详解angular中通过$location获取路径(参数)的写法
2017/03/21 Javascript
详解Angular的8个主要构造块
2017/06/20 Javascript
JS 正则表达式验证密码、邮箱格式的实例代码
2018/10/28 Javascript
微信小程序 slot踩坑的解决
2019/04/01 Javascript
Node.js 的 GC 机制详解
2019/06/03 Javascript
layui实现数据表格table分页功能(ajax异步)
2019/07/27 Javascript
微信小程序用canvas画图并分享
2020/03/09 Javascript
vue 动态创建组件的两种方法
2020/12/31 Vue.js
[13:39]2014 DOTA2华西杯精英邀请赛 5 25 NewBee VS DK第一场
2014/05/26 DOTA
python多线程http下载实现示例
2013/12/30 Python
Python简单实现查找一个字符串中最长不重复子串的方法
2018/03/26 Python
python模糊图片过滤的方法
2018/12/14 Python
Python中变量的输入输出实例代码详解
2019/07/28 Python
Python3 文章标题关键字提取的例子
2019/08/26 Python
Python函数参数类型及排序原理总结
2019/12/19 Python
keras实现多GPU或指定GPU的使用介绍
2020/06/17 Python
pandas抽取行列数据的几种方法
2020/12/13 Python
CSS实现聊天气泡效果
2020/04/26 HTML / CSS
2014年社区工会工作总结
2014/12/18 职场文书
2015年度员工自我评价范文
2015/03/11 职场文书
2017元旦晚会开幕词
2016/03/03 职场文书
Nginx解决前端访问资源跨域问题的方法详解
2021/03/31 Servers
详解Python requests模块
2021/06/21 Python