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 03 PHP
PHP开启gzip页面压缩实例代码
Mar 11 PHP
Fatal error: Call to undefined function curl_init()解决方法
Apr 09 PHP
PHP开发环境配置(MySQL数据库安装图文教程)
Apr 28 PHP
PHP读取XML值的代码(推荐)
Jan 01 PHP
PHP数组交集的优化代码分析
Mar 06 PHP
thinkphp备份数据库的方法分享
Jan 04 PHP
PHP数组遍历的几种常见方式总结
Feb 15 PHP
在 Laravel 项目中使用 webpack-encore的方法
Jul 21 PHP
laravel 验证错误信息到 blade模板的方法
Sep 29 PHP
浅谈Laravel模板实体转义带来的坑
Oct 22 PHP
yii框架结合charjs实现统计30天数据的方法
Apr 04 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
Zend Studio for Eclipse的java.lang.NullPointerException错误的解决方法
2008/12/06 PHP
php制作圆形用户头像的实例_自定义封装类源代码
2017/09/18 PHP
js生成验证码并直接在前端判断
2015/05/15 Javascript
jQuery实现简单的图片查看器
2020/09/11 Javascript
JS中的二叉树遍历详解
2016/03/18 Javascript
JavaScript编写页面半透明遮罩效果的简单示例
2016/05/09 Javascript
jQuery Ajax 全局调用封装实例代码详解
2016/06/02 Javascript
利用Jquery队列实现根据输入数量显示的动画
2016/09/01 Javascript
JS使用正则截取两个字符串之间的字符串实现方法详解
2017/01/06 Javascript
jQuery插件FusionCharts绘制的3D双柱状图效果示例【附demo源码】
2017/04/20 jQuery
详解设置Webstorm 利用babel将ES6自动转码成ES5
2017/12/20 Javascript
react同构实践之实现自己的同构模板
2019/03/13 Javascript
vue中axios请求的封装实例代码
2019/03/23 Javascript
小程序分享模块超级详解(推荐)
2019/04/10 Javascript
layui 富文本编辑器和textarea值的相互传递方法
2019/09/18 Javascript
vue3.0实现插件封装
2020/12/14 Vue.js
Python简单实现子网掩码转换的方法
2016/04/13 Python
opencv python统计及绘制直方图的方法
2019/01/21 Python
python使用threading.Condition交替打印两个字符
2019/05/07 Python
解决pycharm 工具栏Tool中找不到Run manager.py Task的问题
2019/07/01 Python
django写用户登录判定并跳转制定页面的实例
2019/08/21 Python
Expedia加拿大官方网站:加拿大最大的在线旅游提供商
2017/12/31 全球购物
巴西体育用品商店:Lojão dos Esportes
2018/07/21 全球购物
sleep()方法和wait()方法的区别是什么
2012/11/17 面试题
CAD制图人员的自荐信
2014/02/07 职场文书
机关单位人员学雷锋心得体会
2014/03/10 职场文书
公司聘任书模板
2014/03/29 职场文书
敬老院活动总结
2014/04/28 职场文书
纪律教育月活动总结
2014/08/26 职场文书
技术股份合作协议书
2014/10/05 职场文书
2014年档案室工作总结
2014/12/01 职场文书
银行求职信模板
2015/03/20 职场文书
公司表扬信格式
2015/05/04 职场文书
幼儿园门卫安全责任书
2015/05/08 职场文书
《鲁班学艺》读后感3篇
2019/11/27 职场文书
python数字图像处理之对比度与亮度调整示例
2022/06/28 Python