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下判断数组中是否存在相同的值array_unique
Mar 25 PHP
Snoopy类使用小例子
Apr 15 PHP
php实现扫描二维码根据浏览器类型访问不同下载地址
Oct 15 PHP
php使用NumberFormatter格式化货币的方法
Mar 21 PHP
使用GD库生成带阴影文字的图片
Mar 27 PHP
PHP使用CURL实现多线程抓取网页
Apr 30 PHP
简单的自定义php模板引擎
Aug 26 PHP
PHP去除字符串最后一个字符的三种方法实例
Mar 01 PHP
原生php实现excel文件读写的方法分析
Apr 25 PHP
PHP时间函数使用详解
Mar 21 PHP
php引用和拷贝的区别知识点总结
Sep 23 PHP
浅谈PHP之ThinkPHP框架使用详解
Jul 21 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数组函数序列之array_unshift() 在数组开头插入一个或多个元素
2011/11/07 PHP
自定义php类(查找/修改)xml文档
2013/03/26 PHP
php实现对象克隆的方法
2015/06/20 PHP
PHP5.4起内置web服务器使用方法
2016/08/09 PHP
jquery判断checkbox(复选框)是否被选中的代码
2010/10/20 Javascript
js中的getAttribute方法使用示例
2014/08/01 Javascript
js表格排序实例分析(支持int,float,date,string四种数据类型)
2015/05/06 Javascript
jQuery中 delegate使用的问题
2015/07/03 Javascript
js实时获取窗口大小变化的实例代码
2016/11/18 Javascript
浅谈angularjs $http提交数据探索
2017/01/20 Javascript
JavaScript寄生组合式继承实例详解
2018/01/06 Javascript
jquery获取select选中值的文本,并赋值给另一个输入框的方法
2018/08/21 jQuery
vue中接口域名配置为全局变量的实现方法
2018/09/20 Javascript
layui之table checkbox初始化时选中对应选项的方法
2019/09/02 Javascript
JS多个异步请求 按顺序执行next实现解析
2019/09/16 Javascript
vue 路由缓存 路由嵌套 路由守卫 监听物理返回操作
2020/08/06 Javascript
[05:31]DOTA2英雄梦之声_第04期_光之守卫
2014/06/23 DOTA
使用Python脚本将绝对url替换为相对url的教程
2015/04/24 Python
python:print格式化输出到文件的实例
2018/05/14 Python
python中实现字符串翻转的方法
2018/07/11 Python
用python 实现在不确定行数情况下多行输入方法
2019/01/28 Python
opencv python图像梯度实例详解
2020/02/04 Python
OpenCV 之按位运算举例解析
2020/06/19 Python
德国团购网站:Groupon德国
2018/03/13 全球购物
TALLY WEiJL法国网上商店:服装、时装及配饰
2019/08/31 全球购物
戴尔新西兰官网:Dell New Zealand
2020/01/07 全球购物
华硕新加坡官方网上商店:ASUS Singapore
2020/07/09 全球购物
医院门卫岗位职责
2013/12/30 职场文书
工程承包协议书
2014/04/22 职场文书
教师师德考核自我评价
2014/09/13 职场文书
工作经历证明书范文
2014/11/02 职场文书
学生逃课检讨书
2015/02/17 职场文书
撤诉书怎么写
2015/05/19 职场文书
Python如何识别银行卡卡号?
2021/06/10 Python
Python实现简单的俄罗斯方块游戏
2021/09/25 Python
Windows Server 2022 超融合部署(图文教程)
2022/06/25 Servers