php中简单的对称加密算法实现


Posted in PHP onJanuary 05, 2017

前言

在网上找到了一个不错的PHP方面的对称加密算法;在PHP的语法环境里,有urlencode与urldecode,base64_encode和base64_decode自带的对称算法,不过这些自带的算法不能称之为加密算法,只能说是编码方式而已。可是我们可以利用这些来进行一些加工,来实现简单的加密和解密算法。

这次的加密和解密算法是使用base64的方式改编的。通常我们使用base64_encode($str)产生的字符串,不经过任何的加工的话,base64_decode()就能转回我们之前的字符串;可是如果我们在base64_encode()之后的字符串里插入几个字符呢,那他就转不回来了,即使转过来也不是我们自己的字符串。

示例代码如下:

<?php
 $content = "大家好,我是中国人,你是谁";

 /**
 * 简单对称加密算法之加密
 * @param String $string 需要加密的字串
 * @param String $skey 加密EKY
 * @return String
 */
 function encode($string = '', $skey = 'wenzi') {
 $strArr = str_split(base64_encode($string));
 $strCount = count($strArr);
 foreach (str_split($skey) as $key => $value)
  $key < $strCount && $strArr[$key].=$value;
 return str_replace(array('=', '+', '/'), array('O0O0O', 'o000o', 'oo00o'), join('', $strArr));
 }

 /**
 * 简单对称加密算法之解密
 * @param String $string 需要解密的字串
 * @param String $skey 解密KEY
 * @return String
 */
 function decode($string = '', $skey = 'wenzi') {
 $strArr = str_split(str_replace(array('O0O0O', 'o000o', 'oo00o'), array('=', '+', '/'), $string), 2);
 $strCount = count($strArr);
 foreach (str_split($skey) as $key => $value)
  $key <= $strCount && $strArr[$key][1] === $value && $strArr[$key] = $strArr[$key][0];
 return base64_decode(join('', $strArr));
 }

 echo '<pre>';
 echo "string : " . $content . " <br />";
 echo "encode : " . ($enstring = encode($content)) . '<br />';
 echo "decode : " . decode($enstring);

 exit();

上面的算法里我们可以看到:我们把base64_encode()产生的字符中插入我们提前设定的密钥,然后再把里面的特殊字符进行替换,即使别人看到这样的字符串也不知道是什么。当然,这里我们再稍微的改进下,比如把密钥倒着插入到字符串里,密钥base64后再进行插入等等,插入密钥后再base64一次。

当然解密就是加密的反方向了,思考了一会儿才知道解密的原理:之前我们在字符串里插入了一些字符,现在解密时我们就要把他摘出来,首先把加密后的字符串按每个数组里2个元素进行分组,然后判断第二个字符是不是密钥里的,如果是,那么第一个字符就是原来base64里的字符。

总结

以上就是这篇文章的全部内容了,当然在php里除了base64实现加密和解密外,还有AES和DES等算法,有需要的朋友们可以关注三水点靠木,相信会对大家有所帮助。

PHP 相关文章推荐
NT IIS下用ODBC连接数据库
Oct 09 PHP
php上传文件的增强函数
Jul 21 PHP
无法载入 mcrypt 扩展,请检查 PHP 配置终极解决方案
Jul 18 PHP
探讨:使用XMLSerialize 序列化与反序列化
Jun 08 PHP
php var_export与var_dump 输出的不同
Aug 09 PHP
PHP中实现crontab代码分享
Mar 26 PHP
php获取json数据所有的节点路径
May 17 PHP
php实现的网络相册图片防盗链完美破解方法
Jul 01 PHP
PHP简单判断iPhone、iPad、Android及PC设备的方法
Oct 11 PHP
PHP实现简单ajax Loading加载功能示例
Dec 28 PHP
Yii2框架类自动加载机制实例分析
May 02 PHP
TP5(thinkPHP5)框架基于ajax与后台数据交互操作简单示例
Sep 03 PHP
WAF的正确bypass
Jan 05 #PHP
phpcms的分类名称和类别名称的调用
Jan 05 #PHP
php 5.4 全新的代码复用Trait详解
Jan 05 #PHP
golang 调用 php7详解及实例
Jan 04 #PHP
PHP 与 UTF-8 的最佳实践详细介绍
Jan 04 #PHP
详解Yii2 定制表单输入字段的标签和样式
Jan 04 #PHP
PHPExcel导出2003和2007的excel文档功能示例
Jan 04 #PHP
You might like
按上下级层次关系输出内容的PHP代码
2010/07/17 PHP
PHP仿盗链代码
2012/06/03 PHP
php 字符串中的\n换行符无效、不能换行的解决方法
2014/04/02 PHP
PHP简单获取及判断提交来源的方法
2016/04/22 PHP
解决PHP程序运行时:Fatal error: Maximum execution time of 30 seconds exceeded in的错误提示
2016/11/25 PHP
javascript 处理HTML元素必须避免使用的一种方法
2009/07/30 Javascript
javascript获取元素偏移量的方法有哪些
2014/06/24 Javascript
js获取元素相对窗口位置的实现代码
2014/09/28 Javascript
简介JavaScript中的getUTCFullYear()方法的使用
2015/06/10 Javascript
jQuery实现的分子运动小球碰撞效果
2016/01/27 Javascript
Javascript将JSON日期格式化
2016/08/23 Javascript
JavaScript瀑布流布局实现代码
2017/05/06 Javascript
JS图片预加载插件详解
2017/06/21 Javascript
Node批量爬取头条视频并保存方法
2018/09/20 Javascript
深入理解JavaScript 中的执行上下文和执行栈
2018/10/23 Javascript
浅谈监听单选框radio改变事件(和layui中单选按钮改变事件)
2019/09/10 Javascript
JS面试题中深拷贝的实现讲解
2020/05/07 Javascript
vue实现抽屉弹窗效果
2020/11/15 Javascript
python服务器端收发请求的实现代码
2014/09/29 Python
浅谈numpy数组的几种排序方式
2017/12/15 Python
Python爬虫实例扒取2345天气预报
2018/03/04 Python
Python批量生成特定尺寸图片及图画任意文字的实例
2019/01/30 Python
Python学习笔记之错误和异常及访问错误消息详解
2019/08/08 Python
属性与 @property 方法让你的python更高效
2020/09/21 Python
基于html5实现的图片墙效果
2014/10/16 HTML / CSS
印度在线购物网站:Paytmmall
2019/07/24 全球购物
在浏览器端如何得到服务器端响应的XML数据
2012/11/24 面试题
面试必备的求职信
2014/05/25 职场文书
计算机系本科生求职信
2014/05/31 职场文书
小学生自我评价100字(15篇)
2014/09/18 职场文书
法院干警四风问题自我剖析材料
2014/09/29 职场文书
信访工作个人总结
2015/03/03 职场文书
继续教育个人总结
2015/03/03 职场文书
导游词之河北邯郸
2019/09/12 职场文书
Pytorch 使用tensor特定条件判断索引
2021/04/08 Python
redis的list数据类型相关命令介绍及使用
2022/01/18 Redis