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 相关文章推荐
phpMyadmin 用户权限中英对照
Apr 02 PHP
PHP中开发XML应用程序之基础篇 添加节点 删除节点 查询节点 查询节
Jul 09 PHP
延长phpmyadmin登录时间的方法
Feb 06 PHP
PHP中SESSION使用中的一点经验总结
Mar 30 PHP
php中的PHP_EOL换行符详细解析
Oct 26 PHP
php 中文字符串首字母的获取函数分享
Nov 04 PHP
php保存任意网络图片到服务器的方法
Apr 14 PHP
PHP的时间戳与具体时间转化的简单实现
Jun 13 PHP
php从身份证获取性别和出生年月
Feb 09 PHP
PHP获取redis里不存在的6位随机数应用示例【设置24小时过时】
Jun 07 PHP
PHP设计模式之单例模式原理与实现方法分析
Apr 25 PHP
php的命名空间与自动加载实现方法
Aug 25 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 文件上传后缀名与文件类型对照表(几乎涵盖所有文件)
2010/05/16 PHP
PHP 图片上传代码
2011/09/13 PHP
PHP之autoload运行机制实例分析
2014/08/28 PHP
PHP实现负载均衡下的session共用功能
2018/04/17 PHP
ThinkPHP5 的简单搭建和使用详解
2018/11/15 PHP
javascript arguments 传递给函数的隐含参数
2009/08/21 Javascript
jq选项卡鼠标延迟的插件实例
2013/05/13 Javascript
js 判断js函数、变量是否存在的简单示例代码
2014/03/04 Javascript
node.js中的fs.appendFile方法使用说明
2014/12/17 Javascript
Javascript原型链的原理详解
2016/01/05 Javascript
简单谈谈json跨域
2016/03/13 Javascript
js HTML5多媒体影音播放
2016/10/17 Javascript
微信小程序 教程之WXML
2016/10/18 Javascript
jQuery ajax请求struts action实现异步刷新
2017/04/19 jQuery
JavaScript实现移动端页面按手机屏幕分辨率自动缩放的最强代码
2017/08/18 Javascript
[js高手之路]从原型链开始图解继承到组合继承的产生详解
2017/08/28 Javascript
js实现课堂随机点名系统
2019/11/21 Javascript
python中的json总结
2018/10/11 Python
Dlib+OpenCV深度学习人脸识别的方法示例
2019/05/14 Python
Django通用类视图实现忘记密码重置密码功能示例
2019/12/17 Python
Python使用matplotlib绘制圆形代码实例
2020/05/27 Python
Django contrib auth authenticate函数源码解析
2020/11/12 Python
中国网上药店领导者:1药网
2017/02/16 全球购物
eBay加拿大站:eBay.ca
2019/06/20 全球购物
澳大利亚最受欢迎的超级商场每日优惠:Catch
2020/11/17 全球购物
如何处理简单的PHP错误
2015/10/14 面试题
销售会计工作职责
2013/12/02 职场文书
装修设计师求职信
2014/02/26 职场文书
硕士研究生就业推荐信
2014/05/18 职场文书
公司大门门卫岗位职责
2014/06/11 职场文书
政风行风自查自纠报告
2014/10/21 职场文书
大学生个人学年总结
2015/02/15 职场文书
学校百日安全活动总结
2015/05/07 职场文书
就业推荐表院系意见
2015/06/05 职场文书
学校证明范文
2015/06/24 职场文书
golang如何去除多余空白字符(含制表符)
2021/04/25 Golang