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 相关文章推荐
利用递归把多维数组转为一维数组的函数
Oct 09 PHP
asp和php下textarea提交大量数据发生丢失的解决方法
Jan 20 PHP
php中变量及部分适用方法
Mar 27 PHP
php class中public,private,protected的区别以及实例分析
Jun 18 PHP
PHP中使用json数据格式定义字面量对象的方法
Aug 20 PHP
php版微信发红包接口用法示例
Sep 23 PHP
PHP会话操作之cookie用法分析
Sep 28 PHP
yii2使用GridView实现数据全选及批量删除按钮示例
Mar 01 PHP
Yii框架参数化查询中IN查询只能查询一个的解决方法
May 20 PHP
PHP一致性hash分布式算法封装类定义与用法示例
Aug 04 PHP
tp5(thinkPHP5框架)captcha验证码配置及验证操作示例
May 28 PHP
Thinkphp5.0 框架的请求方式与响应方式分析
Oct 14 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
使用 eAccelerator加速PHP代码的目的
2007/03/16 PHP
windows7下php开发环境搭建图文教程
2015/01/06 PHP
适用于初学者的简易PHP文件上传类
2015/10/29 PHP
PHP简单实现数字分页功能示例
2016/08/24 PHP
Yii框架Session与Cookie使用方法示例
2019/10/14 PHP
什么是JavaScript
2009/08/13 Javascript
js控制frameSet示例
2013/09/10 Javascript
用Javascript获取页面元素的具体位置
2013/12/09 Javascript
网站内容禁止复制和粘贴、另存为的js代码
2014/02/26 Javascript
JS+CSS实现感应鼠标渐变显示DIV层的方法
2015/02/20 Javascript
JavaScript监听文本框回车事件并过滤文本框空格的方法
2015/04/16 Javascript
javascript拖拽应用实例(二)
2016/03/25 Javascript
jQuery 3.0 的 setter和getter 模式详解
2016/07/11 Javascript
AngularJS使用ng-repeat遍历二维数组元素的方法详解
2017/11/11 Javascript
Angularjs过滤器实现动态搜索与排序功能示例
2017/12/13 Javascript
node基于puppeteer模拟登录抓取页面的实现
2018/05/09 Javascript
vue移动端轻量级的轮播组件实现代码
2018/07/12 Javascript
使用vue点击li,获取当前点击li父辈元素的属性值方法
2018/09/12 Javascript
vue.js的vue-cli脚手架中使用百度地图API的实例
2019/01/21 Javascript
微信小程序动态设置图片大小的方法
2019/11/21 Javascript
解决echarts vue数据更新,视图不更新问题(echarts嵌在vue弹框中)
2020/07/20 Javascript
js实现自定义滚动条的示例
2020/10/27 Javascript
Python对两个有序列表进行合并和排序的例子
2014/06/13 Python
用python写个自动SSH登录远程服务器的小工具(实例)
2017/06/17 Python
Python 和 JS 有哪些相同之处
2017/11/23 Python
对python:循环定义多个变量的实例详解
2019/01/20 Python
使用Python实现毫秒级抢单功能
2019/06/06 Python
如何用 Python 制作一个迷宫游戏
2021/02/25 Python
联想韩国官网:Lenovo Korea
2018/05/10 全球购物
成教自我鉴定
2013/10/27 职场文书
销售经理工作职责
2014/02/03 职场文书
人事专员的岗位职责
2014/03/01 职场文书
企业优秀员工事迹材料
2014/05/28 职场文书
会计学毕业生求职信
2014/06/25 职场文书
小学推普周活动总结
2015/05/07 职场文书
2019学校运动会开幕词
2019/05/13 职场文书