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模板的朋友必看的很多个顶级PHP模板引擎比较分析
May 26 PHP
对squid中refresh_pattern的一些理解和建议
Apr 17 PHP
php中常用字符串处理代码片段整理
Nov 07 PHP
PHP获取MSN好友列表类的实现代码
Jun 23 PHP
Nginx下配置codeigniter框架方法
Apr 07 PHP
php可扩展的验证类实例(可对邮件、手机号、URL等验证)
Jul 09 PHP
php获取远程文件内容的函数
Nov 02 PHP
Zend Framework教程之Autoloading用法详解
Mar 08 PHP
PHP的Laravel框架中使用AdminLTE模板来编写网站后台界面
Mar 21 PHP
Zend Framework入门教程之Zend_Mail用法示例
Dec 08 PHP
PHP实现基于栈的后缀表达式求值功能
Nov 10 PHP
php实现微信支付之企业付款
May 30 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
DOTA2 探索永无止境 玩家自创强悍插眼攻略
2020/04/20 DOTA
php集成环境xampp中apache无法启动问题解决方案
2014/11/18 PHP
php计划任务之验证是否有多个进程调用同一个job的方法
2015/12/07 PHP
PHP自定义函数获取URL中一级域名的方法
2016/08/23 PHP
jQuery+CSS 实现的超Sexy下拉菜单
2010/01/17 Javascript
Javascript 修改String 对象 增加去除空格功能(示例代码)
2013/11/30 Javascript
表单提交前触发函数返回true表单才会提交
2014/03/11 Javascript
jquery mobile的触控点击事件会多次触发问题的解决方法
2014/05/08 Javascript
理解JavaScript的变量的入门教程
2015/07/07 Javascript
浅谈javascript中的call、apply、bind
2016/03/06 Javascript
盘点javascript 正则表达式中 中括号的【坑】
2016/03/16 Javascript
Jquery跨域获得Json的简单实例
2016/05/18 Javascript
JS碰撞运动实现方法详解
2016/12/15 Javascript
Vue.js系列之项目搭建(1)
2017/01/03 Javascript
老生常谈angularjs中的$state.go
2017/04/24 Javascript
js图片放大镜实例讲解(必看篇)
2017/07/17 Javascript
浅析Python 中整型对象存储的位置
2016/05/16 Python
Python使用matplotlib绘制正弦和余弦曲线的方法示例
2018/01/06 Python
python 图像平移和旋转的实例
2019/01/10 Python
python opencv判断图像是否为空的实例
2019/01/26 Python
Python实现一个数组除以一个数的例子
2019/07/20 Python
基于Python实现拆分和合并GIF动态图
2019/10/22 Python
Python线程协作threading.Condition实现过程解析
2020/03/12 Python
美国农场鲜花速递:The Bouqs
2018/07/13 全球购物
世界上最大的铁人三项商店:Tri UK
2020/11/04 全球购物
草莓网中国:StrawberryNet中国
2020/08/17 全球购物
百度软件工程师职位
2013/02/14 面试题
高中毕业生自我鉴定
2013/11/03 职场文书
大学毕业感言100字
2014/02/03 职场文书
机关作风建设心得体会
2014/10/22 职场文书
学习十八届四中全会依法治国心得体会
2014/11/03 职场文书
2015年语文教师工作总结
2015/05/25 职场文书
千手观音观后感
2015/06/03 职场文书
POST提交数据常见的四种方式
2022/01/18 HTML / CSS
Win11右下角图标点了没反应怎么办?Win11点击右下角图标无反应解决方法汇总
2022/07/07 数码科技
GPU服务器的多用户配置方法
2022/07/07 Servers