PHP写的加密函数,支持私人密钥(详细介绍)


Posted in PHP onJune 09, 2013

在开发PHP系统时,会员部分往往是一个必不可少的模块,而密码的处理又是不得不面对的问题,PHP 的 Mcrypt 加密库又需要额外设置,很多人都是直接使用md5()函数加密,这个方法的确安全,但是因为md5是不可逆加密,无法还原密码,因此也有一些不便之处,本文介绍加密函数支持私钥,用起来还是不错的.
代码如下:
PHP:

<ol><li class="li1"><div class="de1"> </div>
</li>
<li class="li1"><div class="de1"><span class="kw2"><?php</span>
 </div>
</li>
<li class="li1"><div class="de1"><span class="co1">// 说明:PHP 写的加密函数,支持私人密钥 </span>
</div>
</li>
<li class="li1"><div class="de1"><span class="co1">// 整理:https://3water.com </span>
</div>
</li>
<li class="li2"><div class="de2"> </div>
</li>
<li class="li1"><div class="de1"><span class="kw2">function</span>
 keyED<span class="br0">(</span>
<span class="re0">$txt</span>
,<span class="re0">$encrypt_key</span>
<span class="br0">)</span>
   </div>
</li>
<li class="li1"><div class="de1"><span class="br0">{</span>
   </div>
</li>
<li class="li1"><div class="de1">    <span class="re0">$encrypt_key</span>
 = <span class="kw3">md5</span>
<span class="br0">(</span>
<span class="re0">$encrypt_key</span>
<span class="br0">)</span>
;   </div>
</li>
<li class="li1"><div class="de1">    <span class="re0">$ctr</span>
=<span class="nu0">0</span>
;   </div>
</li>
<li class="li2"><div class="de2">    <span class="re0">$tmp</span>
 = <span class="st0">""</span>
;   </div>
</li>
<li class="li1"><div class="de1">    <span class="kw1">for</span>
 <span class="br0">(</span>
<span class="re0">$i</span>
=<span class="nu0">0</span>
;<span class="re0">$i</span>
<strlen<span class="br0">(</span>
<span class="re0">$txt</span>
<span class="br0">)</span>
;<span class="re0">$i</span>
++<span class="br0">)</span>
   </div>
</li>
<li class="li1"><div class="de1">    <span class="br0">{</span>
   </div>
</li>
<li class="li1"><div class="de1">        <span class="kw1">if</span>
 <span class="br0">(</span>
<span class="re0">$ctr</span>
==<span class="kw3">strlen</span>
<span class="br0">(</span>
<span class="re0">$encrypt_key</span>
<span class="br0">)</span>
<span class="br0">)</span>
 <span class="re0">$ctr</span>
=<span class="nu0">0</span>
;   </div>
</li>
<li class="li1"><div class="de1">        <span class="re0">$tmp</span>
.= <span class="kw3">substr</span>
<span class="br0">(</span>
<span class="re0">$txt</span>
,<span class="re0">$i</span>
,<span class="nu0">1</span>
<span class="br0">)</span>
 ^ <span class="kw3">substr</span>
<span class="br0">(</span>
<span class="re0">$encrypt_key</span>
,<span class="re0">$ctr</span>
,<span class="nu0">1</span>
<span class="br0">)</span>
;   </div>
</li>
<li class="li2"><div class="de2">        <span class="re0">$ctr</span>
++;   </div>
</li>
<li class="li1"><div class="de1">    <span class="br0">}</span>
   </div>
</li>
<li class="li1"><div class="de1">    <span class="kw1">return</span>
 <span class="re0">$tmp</span>
;   </div>
</li>
<li class="li1"><div class="de1"><span class="br0">}</span>
   </div>
</li>
<li class="li1"><div class="de1"> </div>
</li>
<li class="li2"><div class="de2"><span class="kw2">function</span>
 encrypt<span class="br0">(</span>
<span class="re0">$txt</span>
,<span class="re0">$key</span>
<span class="br0">)</span>
   </div>
</li>
<li class="li1"><div class="de1"><span class="br0">{</span>
   </div>
</li>
<li class="li1"><div class="de1">    <span class="kw3">srand</span>
<span class="br0">(</span>
<span class="br0">(</span>
double<span class="br0">)</span>
<span class="kw3">microtime</span>
<span class="br0">(</span>
<span class="br0">)</span>
*<span class="nu0">1000000</span>
<span class="br0">)</span>
;   </div>
</li>
<li class="li1"><div class="de1">    <span class="re0">$encrypt_key</span>
 = <span class="kw3">md5</span>
<span class="br0">(</span>
<span class="kw3">rand</span>
<span class="br0">(</span>
<span class="nu0">0</span>
,<span class="nu0">32000</span>
<span class="br0">)</span>
<span class="br0">)</span>
;   </div>
</li>
<li class="li1"><div class="de1">    <span class="re0">$ctr</span>
=<span class="nu0">0</span>
;   </div>
</li>
<li class="li2"><div class="de2">    <span class="re0">$tmp</span>
 = <span class="st0">""</span>
;   </div>
</li>
<li class="li1"><div class="de1">    <span class="kw1">for</span>
 <span class="br0">(</span>
<span class="re0">$i</span>
=<span class="nu0">0</span>
;<span class="re0">$i</span>
<strlen<span class="br0">(</span>
<span class="re0">$txt</span>
<span class="br0">)</span>
;<span class="re0">$i</span>
++<span class="br0">)</span>
   </div>
</li>
<li class="li1"><div class="de1">    <span class="br0">{</span>
   </div>
</li>
<li class="li1"><div class="de1">        <span class="kw1">if</span>
 <span class="br0">(</span>
<span class="re0">$ctr</span>
==<span class="kw3">strlen</span>
<span class="br0">(</span>
<span class="re0">$encrypt_key</span>
<span class="br0">)</span>
<span class="br0">)</span>
 <span class="re0">$ctr</span>
=<span class="nu0">0</span>
;   </div>
</li>
<li class="li1"><div class="de1">        <span class="re0">$tmp</span>
.= <span class="kw3">substr</span>
<span class="br0">(</span>
<span class="re0">$encrypt_key</span>
,<span class="re0">$ctr</span>
,<span class="nu0">1</span>
<span class="br0">)</span>
 . <span class="br0">(</span>
<span class="kw3">substr</span>
<span class="br0">(</span>
<span class="re0">$txt</span>
,<span class="re0">$i</span>
,<span class="nu0">1</span>
<span class="br0">)</span>
 ^ <span class="kw3">substr</span>
<span class="br0">(</span>
<span class="re0">$encrypt_key</span>
,<span class="re0">$ctr</span>
,<span class="nu0">1</span>
<span class="br0">)</span>
<span class="br0">)</span>
;   </div>
</li>
<li class="li2"><div class="de2">        <span class="re0">$ctr</span>
++;   </div>
</li>
<li class="li1"><div class="de1">    <span class="br0">}</span>
   </div>
</li>
<li class="li1"><div class="de1">    <span class="kw1">return</span>
 keyED<span class="br0">(</span>
<span class="re0">$tmp</span>
,<span class="re0">$key</span>
<span class="br0">)</span>
; </div>
</li>
<li class="li1"><div class="de1"><span class="br0">}</span>
   </div>
</li>
<li class="li1"><div class="de1"> </div>
</li>
<li class="li2"><div class="de2"><span class="kw2">function</span>
 decrypt<span class="br0">(</span>
<span class="re0">$txt</span>
,<span class="re0">$key</span>
<span class="br0">)</span>
   </div>
</li>
<li class="li1"><div class="de1"><span class="br0">{</span>
   </div>
</li>
<li class="li1"><div class="de1">    <span class="re0">$txt</span>
 = keyED<span class="br0">(</span>
<span class="re0">$txt</span>
,<span class="re0">$key</span>
<span class="br0">)</span>
;   </div>
</li>
<li class="li1"><div class="de1">    <span class="re0">$tmp</span>
 = <span class="st0">""</span>
;   </div>
</li>
<li class="li1"><div class="de1">    <span class="kw1">for</span>
 <span class="br0">(</span>
<span class="re0">$i</span>
=<span class="nu0">0</span>
;<span class="re0">$i</span>
<strlen<span class="br0">(</span>
<span class="re0">$txt</span>
<span class="br0">)</span>
;<span class="re0">$i</span>
++<span class="br0">)</span>
   </div>
</li>
<li class="li2"><div class="de2">    <span class="br0">{</span>
   </div>
</li>
<li class="li1"><div class="de1">        <span class="re0">$md5</span>
 = <span class="kw3">substr</span>
<span class="br0">(</span>
<span class="re0">$txt</span>
,<span class="re0">$i</span>
,<span class="nu0">1</span>
<span class="br0">)</span>
;   </div>
</li>
<li class="li1"><div class="de1">        <span class="re0">$i</span>
++;   </div>
</li>
<li class="li1"><div class="de1">        <span class="re0">$tmp</span>
.= <span class="br0">(</span>
<span class="kw3">substr</span>
<span class="br0">(</span>
<span class="re0">$txt</span>
,<span class="re0">$i</span>
,<span class="nu0">1</span>
<span class="br0">)</span>
 ^ <span class="re0">$md5</span>
<span class="br0">)</span>
;   </div>
</li>
<li class="li1"><div class="de1">    <span class="br0">}</span>
   </div>
</li>
<li class="li2"><div class="de2">    <span class="kw1">return</span>
 <span class="re0">$tmp</span>
;   </div>
</li>
<li class="li1"><div class="de1"><span class="br0">}</span>
  </div>
</li>
<li class="li1"><div class="de1"> </div>
</li>
<li class="li1"><div class="de1"><span class="re0">$key</span>
 = <span class="st0">"www.yitu.org"</span>
;   </div>
</li>
<li class="li1"><div class="de1"><span class="re0">$string</span>
 = <span class="st0">"我是加密字符"</span>
;   </div>
</li>
<li class="li2"><div class="de2"> </div>
</li>
<li class="li1"><div class="de1"><span class="co1">// encrypt $string, and store it in $enc_text   </span>
</div>
</li>
<li class="li1"><div class="de1"><span class="re0">$enc_text</span>
 = encrypt<span class="br0">(</span>
<span class="re0">$string</span>
,<span class="re0">$key</span>
<span class="br0">)</span>
;   </div>
</li>
<li class="li1"><div class="de1"> </div>
</li>
<li class="li1"><div class="de1"><span class="co1">// decrypt the encrypted text $enc_text, and store it in $dec_text   </span>
</div>
</li>
<li class="li2"><div class="de2"><span class="re0">$dec_text</span>
 = decrypt<span class="br0">(</span>
<span class="re0">$enc_text</span>
,<span class="re0">$key</span>
<span class="br0">)</span>
;   </div>
</li>
<li class="li1"><div class="de1"> </div>
</li>
<li class="li1"><div class="de1"><span class="kw3">print</span>
 <span class="st0">"加密的 text : $enc_text <Br> "</span>
;   </div>
</li>
<li class="li1"><div class="de1"><span class="kw3">print</span>
 <span class="st0">"解密的 text : $dec_text <Br> "</span>
;   </div>
</li>
<li class="li1"><div class="de1"><span class="kw2">?></span>
 </div>
</li>
<li class="li2"><div class="de2"> </div>
</li>
</ol>

每一次加密后的结果是不一样的,大大加强了密码的安全性.
PHP 相关文章推荐
PHP字符转义相关函数小结(php下的转义字符串)
Apr 12 PHP
纯PHP生成的一个树叶图片画图例子
Apr 16 PHP
使用php的HTTP请求的库Requests实现美女图片墙
Feb 22 PHP
php数字每三位加逗号的功能函数
Oct 22 PHP
在Mac OS的PHP环境下安装配置MemCache的全过程解析
Feb 15 PHP
php抽奖概率算法(刮刮卡,大转盘)
Apr 17 PHP
php利用gd库为图片添加水印
Nov 09 PHP
Django 中 cookie的使用
Aug 17 PHP
php 判断IP为有效IP地址的方法
Jan 28 PHP
php将从数据库中获得的数据转换成json格式并输出的方法
Aug 21 PHP
PHP里的$_GET数组介绍
Mar 22 PHP
一文掌握PHP Xdebug 本地与远程调试(小结)
Apr 23 PHP
PHP版 汉字转码的实现详解
Jun 09 #PHP
php批量上传的实现代码
Jun 09 #PHP
PHP转换IP地址到真实地址的方法详解
Jun 09 #PHP
linux环境apache多端口配置虚拟主机的方法深入介绍
Jun 09 #PHP
探讨PHP删除文件夹的三种方法
Jun 09 #PHP
如何用php获取文件名后缀
Jun 09 #PHP
深入php多态的实现详解
Jun 09 #PHP
You might like
咖啡产品发展的三大浪潮
2021/03/04 咖啡文化
PHP CURL获取cookies模拟登录的方法
2013/11/04 PHP
php保存二进制原始数据为图片的程序代码
2014/10/14 PHP
php函数与传递参数实例分析
2014/11/15 PHP
PHP上传Excel文件导入数据到MySQL数据库示例
2016/10/25 PHP
js 覆盖和重载 函数
2009/09/25 Javascript
跨浏览器的事件对象介绍
2012/06/27 Javascript
基于JQuery的一句话搞定手风琴菜单
2012/09/14 Javascript
jQuery获得内容和属性方法及示例
2013/12/02 Javascript
基于javascript显示当前时间以及倒计时功能
2016/03/18 Javascript
Jquery ui datepicker设置日期范围,如只能隔3天【实现代码】
2016/05/04 Javascript
JavaScript原生对象常用方法总结(推荐)
2016/05/13 Javascript
js利用clipboardData实现截屏粘贴功能
2016/10/12 Javascript
使用Nuxt.js改造已有项目的方法
2018/08/07 Javascript
Vue弹出菜单功能的实现代码
2018/09/12 Javascript
从Vuex中取出数组赋值给新的数组,新数组push时报错的解决方法
2018/09/18 Javascript
react koa rematch 如何打造一套服务端渲染架子
2019/06/26 Javascript
学习 Vue.js 遇到的那些坑
2021/02/02 Vue.js
Python中的数学运算操作符使用进阶
2016/06/20 Python
Python动刷新抢12306火车票的代码(附源码)
2018/01/24 Python
pycharm重置设置,恢复默认设置的方法
2018/10/22 Python
Python之使用adb shell命令启动应用的方法详解
2019/01/07 Python
利用Python+阿里云实现DDNS动态域名解析的方法
2019/04/01 Python
python 杀死自身进程的实现方法
2019/07/01 Python
window7下的python2.7版本和python3.5版本的opencv-python安装过程
2019/10/24 Python
canvas实现手机的手势解锁的步骤详细
2020/03/16 HTML / CSS
Aveda美国官网:天然护发产品、洗发水、护发素和沙龙
2016/12/09 全球购物
什么是符号链接,什么是硬链接?符号链接与硬链接的区别是什么?
2013/05/03 面试题
创业计划书如何编写
2014/02/06 职场文书
财务管理职业生涯规划书
2014/02/26 职场文书
《放飞蜻蜓》教学反思
2014/04/27 职场文书
学校花圃的标语
2014/06/18 职场文书
国际贸易毕业生自荐书
2014/06/22 职场文书
体育馆的标语
2014/06/24 职场文书
协商一致解除劳动合同协议书
2014/09/14 职场文书
驾驶员管理制度范本
2015/08/06 职场文书