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中养成7个面向对象的好习惯
Jan 28 PHP
php安全之直接用$获取值而不$_GET 字符转义
Jun 03 PHP
php实现多张图片上传加水印技巧
Apr 18 PHP
PHP导航下拉菜单的实现如此简单
Sep 22 PHP
php判断正常访问和外部访问的示例
Feb 10 PHP
php数组去重复数据示例
Feb 25 PHP
自己写的php curl库实现整站克隆功能
Feb 12 PHP
php使用ffmpeg获取视频信息并截图的实现方法
May 03 PHP
总结PHP内存释放以及垃圾回收
Mar 29 PHP
php使用array_chunk函数将一个数组分割成多个数组
Dec 05 PHP
详解PHP 7.4 中数组延展操作符语法知识点
Jul 19 PHP
php输出反斜杠的实例方法
Sep 19 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获取地址栏信息的代码
2008/10/08 PHP
PHP 上传文件大小限制
2009/07/05 PHP
PHP函数nl2br()与自定义函数nl2p()换行用法分析
2016/04/02 PHP
thinkPHP实现的联动菜单功能详解
2017/05/05 PHP
Yii2 如何在modules中添加验证码的方法
2017/06/19 PHP
经常用的图片在容器中的水平垂直居中实例
2007/06/10 Javascript
javascript 定义新对象方法
2010/02/20 Javascript
js操作时间(年-月-日 时-分-秒 星期几)
2010/06/20 Javascript
谈谈关于JavaScript 中的 MVC 模式
2013/04/11 Javascript
JS获取文本框,下拉框,单选框的值的简单实例
2014/02/26 Javascript
使用jQuery mobile库检测url绝对地址和相对地址的方法
2015/12/04 Javascript
Bootstrap CSS组件之面包屑导航(breadcrumb)
2016/12/17 Javascript
vue+webpack 打包文件 404 页面空白的解决方法
2018/02/28 Javascript
JS中双击和单击事件冲突的解决方法
2018/04/09 Javascript
Vue CLI3搭建的项目中路径相关问题的解决
2018/09/17 Javascript
vue 右键菜单插件 简单、可扩展、样式自定义的右键菜单
2018/11/29 Javascript
微信小程序实现卡片左右滑动效果的示例代码
2019/05/01 Javascript
[38:41]2014 DOTA2国际邀请赛中国区预选赛 LGD VS CNB
2014/05/22 DOTA
Python学习笔记之os模块使用总结
2014/11/03 Python
python实现挑选出来100以内的质数
2015/03/24 Python
Python实现Mysql数据库连接池实例详解
2017/04/11 Python
Python编程产生非均匀随机数的几种方法代码分享
2017/12/13 Python
在 Jupyter 中重新导入特定的 Python 文件(场景分析)
2019/10/27 Python
Python3内置函数chr和ord实现进制转换
2020/06/05 Python
Django模板报TemplateDoesNotExist异常(亲测可行)
2020/12/18 Python
Under Armour西班牙官网:美国知名的高端功能性运动品牌
2018/12/12 全球购物
Michael Kors加拿大官网:购买设计师手袋、手表、鞋子、服装等
2019/03/16 全球购物
法律进社区实施方案
2014/03/21 职场文书
医院护士见习期自我鉴定
2014/04/10 职场文书
2014年新生军训方案
2014/05/01 职场文书
2014年法务工作总结
2014/12/11 职场文书
财务总监岗位职责范本
2015/04/03 职场文书
《我在为谁工作》:工作的质量往往决定生活的质量
2019/12/27 职场文书
实例讲解Python中sys.argv[]的用法
2021/06/03 Python
Apache POI的基本使用详解
2021/11/07 Servers
HTML页面中使两个div并排显示的实现
2022/05/15 HTML / CSS