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(1)
Oct 09 PHP
WML,Apache,和 PHP 的介绍
Oct 09 PHP
简单采集了yahoo的一些数据
Feb 14 PHP
php 自写函数代码 获取关键字 去超链接
Feb 08 PHP
基于php设计模式中工厂模式详细介绍
May 15 PHP
Zend Framework 2.0事件管理器(The EventManager)入门教程
Aug 11 PHP
DOM基础及php读取xml内容操作的方法
Jan 23 PHP
ecshop 2.72如何修改后台访问地址
Mar 03 PHP
1亿条数据如何分表100张到Mysql数据库中(PHP)
Jul 29 PHP
Laravel中GraphQL接口请求频率实战记录
Sep 01 PHP
常见的5个PHP编码小陋习以及优化实例讲解
Feb 27 PHP
open_basedir restriction in effect. 原因与解决方法
Mar 14 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/14 PHP
PHP 数组基础知识小结
2010/08/20 PHP
PHP中数字检测is_numeric与ctype_digit的区别介绍
2012/10/04 PHP
学习PHP session的传递方式
2016/06/15 PHP
PHP实现的链式队列结构示例
2017/09/15 PHP
PHP去除空数组且数组键名重置的讲解
2019/02/28 PHP
javascript 限制输入和粘贴(IE,firefox测试通过)
2008/11/14 Javascript
学习ExtJS TextField常用方法
2009/10/07 Javascript
基于Asp.net与Javascript控制的日期控件
2010/05/22 Javascript
jquery五角星评分插件示例分享
2014/02/21 Javascript
window resize和scroll事件的基本优化思路
2014/04/29 Javascript
详解js跨域原理以及2种解决方案
2015/12/09 Javascript
基于javascript实现动态时钟效果
2020/08/18 Javascript
jQuery each函数源码分析
2016/05/25 Javascript
关于 jQuery Easyui异步加载tree的问题解析
2016/12/06 Javascript
JS中静态页面实现微信分享功能
2017/02/06 Javascript
微信小程序组件之srcoll-view的详解
2017/10/19 Javascript
D3.js实现简洁实用的动态仪表盘的示例
2018/04/04 Javascript
微信小程序自定义组件之可清除的input组件
2018/07/17 Javascript
JS创建自定义对象的六种方法总结
2020/12/15 Javascript
[49:13]DOTA2上海特级锦标赛C组资格赛#1 OG VS LGD第一局
2016/02/27 DOTA
Python设计模式之代理模式实例
2014/04/26 Python
跟老齐学Python之折腾一下目录
2014/10/24 Python
python中使用xlrd、xlwt操作excel表格详解
2015/01/29 Python
pygame游戏之旅 添加游戏暂停功能
2018/11/21 Python
Python实现操纵控制windows注册表的方法分析
2019/05/24 Python
python selenium登录豆瓣网过程解析
2019/08/10 Python
python实现用户名密码校验
2020/03/18 Python
如何在django中运行scrapy框架
2020/04/22 Python
美国厨房和园艺工具网上商店:Nestneed
2019/08/24 全球购物
KOHLER科勒美国官网:国际著名卫浴橱柜领先品牌
2020/06/27 全球购物
美国小蜜蜂Burt’s Bees德国官网:天然唇部、皮肤和身体护理产品
2020/06/14 全球购物
单位门卫岗位职责
2013/12/20 职场文书
2014年教师党员公开承诺书
2014/05/28 职场文书
单位接收函格式
2015/01/30 职场文书
Python爬虫之爬取某文库文档数据
2021/04/21 Python