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 相关文章推荐
php公用函数列表[正则]
Feb 22 PHP
php google或baidu分页代码
Nov 26 PHP
使用php将某个目录下面的所有文件罗列出来的方法详解
Jun 21 PHP
提高PHP编程效率的方法
Nov 07 PHP
PHP实现图片裁剪、添加水印效果代码
Oct 01 PHP
php字符串函数学习之substr()
Mar 27 PHP
PHP入门教程之表单与验证实例详解
Sep 11 PHP
js基于qrcode.js生成二维码的方法【附demo插件源码下载】
Dec 28 PHP
EarthLiveSharp中cloudinary的CDN图片缓存自动清理python脚本
Apr 04 PHP
PHP生成各种随机验证码的方法总结【附demo源码】
Jun 05 PHP
Laravel5.4简单实现app接口Api Token认证方法
Aug 29 PHP
php获取是星期几的的一些常用姿势
Dec 15 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学习之PHP表达式
2006/10/09 PHP
Smarty foreach控制循环次数的一些方法
2015/07/01 PHP
PHP生成和获取XML格式数据的方法
2016/03/04 PHP
PHP基于swoole多进程操作示例
2019/08/12 PHP
JavaScript 类型的包装对象(Typed Wrappers)
2011/10/27 Javascript
js DOM 元素ID就是全局变量
2012/09/20 Javascript
jQuery的DOM操作之删除节点示例
2014/01/03 Javascript
JavaScript模块规范之AMD规范和CMD规范
2015/10/27 Javascript
基于d3.js实现实时刷新的折线图
2016/08/03 Javascript
JavaScript中数组Array方法详解
2017/02/27 Javascript
vue debug 二种方法
2018/09/16 Javascript
webpack实践之DLLPlugin 和 DLLReferencePlugin的使用教程
2019/06/10 Javascript
vue-mugen-scroll组件实现pc端滚动刷新
2019/08/16 Javascript
vue实现多级菜单效果
2019/10/19 Javascript
jQuery表单校验插件validator使用方法详解
2020/02/18 jQuery
原生js实现html手机端城市列表索引选择城市
2020/06/24 Javascript
JavaScript代码简化技巧实例解析
2020/09/09 Javascript
[01:31]DOTA2上海特级锦标赛 SECRET战队完整宣传片
2016/03/16 DOTA
Python 字符串操作实现代码(截取/替换/查找/分割)
2013/06/08 Python
Python文件和目录操作详解
2015/02/08 Python
探究Python的Tornado框架对子域名和泛域名的支持
2015/05/02 Python
python实现简单点对点(p2p)聊天
2017/09/13 Python
python3利用ctypes传入一个字符串类型的列表方法
2019/02/12 Python
Python编写带选项的命令行程序方法
2019/08/13 Python
python word转pdf代码实例
2019/08/16 Python
Django+Uwsgi+Nginx如何实现生产环境部署
2020/07/31 Python
python 实现超级玛丽游戏
2020/11/25 Python
纯css3实现图片翻牌特效
2015/03/10 HTML / CSS
常见的软件开发流程有哪些
2015/11/14 面试题
高中毕业自我鉴定范文
2013/10/02 职场文书
财会自我鉴定范文
2013/12/27 职场文书
先进个人事迹材料
2014/01/25 职场文书
cf战队收人广告词
2014/03/14 职场文书
2014年高数考试作弊检讨书
2014/12/14 职场文书
学校开除通知书
2015/04/25 职场文书
详解Laravel服务容器的优势
2021/05/29 PHP