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最常用的ini函数分析 针对PHP.ini配置文件
Apr 22 PHP
PHP学习笔记 (1) 环境配置与代码调试
Jun 19 PHP
Linux fgetcsv取得的数组元素为空字符串的解决方法
Nov 25 PHP
执行、获取远程代码返回:file_get_contents 超时处理的问题详解
Jun 25 PHP
php将12小时制转换成24小时制的方法
Mar 31 PHP
php实现阿拉伯数字和罗马数字相互转换的方法
Apr 17 PHP
PHP Web木马扫描器代码分享
Sep 06 PHP
浅谈PHP检查数组中是否存在某个值 in_array 函数
Jun 13 PHP
PHP入门教程之会话控制技巧(cookie与session)
Sep 11 PHP
使用ThinkPHP生成缩略图及显示
Apr 27 PHP
PHP下 Mongodb 连接远程数据库的实例代码
Aug 30 PHP
php中的钩子理解及应用实例分析
Aug 30 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 的 __FILE__ 常量
2007/01/15 PHP
php flush类输出缓冲剖析
2008/10/19 PHP
处理单名多值表单的详解
2013/06/08 PHP
php获取本机真实IP地址实例代码
2016/03/31 PHP
使用 JScript 创建 .exe 或 .dll 文件的方法
2011/07/13 Javascript
js 单击式的下拉菜单效果实例
2013/08/13 Javascript
使用CSS和jQuery模拟select并附提交后取得数据的代码
2013/10/18 Javascript
JS仿百度搜索自动提示框匹配查询功能
2013/11/21 Javascript
js select option对象小结
2013/12/20 Javascript
laypage分页控件使用实例详解
2016/05/19 Javascript
javascript滚轮事件基础实例讲解(37)
2017/02/14 Javascript
详解vue父子模版嵌套案例
2017/03/04 Javascript
原生js 封装get ,post, delete 请求的实例
2017/08/11 Javascript
Vue使用枚举类型实现HTML下拉框步骤详解
2018/02/05 Javascript
angular第三方包开发整理(小结)
2018/04/19 Javascript
vue-cli配置环境变量的方法
2018/07/09 Javascript
iconfont的三种使用方式详解
2018/08/05 Javascript
微信小程序实现元素渐入渐出动画效果封装方法
2019/05/18 Javascript
layui 富文本编辑器和textarea值的相互传递方法
2019/09/18 Javascript
在 Python 应用中使用 MongoDB的方法
2017/01/05 Python
python实现的AES双向对称加密解密与用法分析
2017/05/02 Python
python判断一个集合是否为另一个集合的子集方法
2018/05/04 Python
pandas筛选某列出现编码错误的解决方法
2018/11/07 Python
python实现LBP方法提取图像纹理特征实现分类的步骤
2019/07/11 Python
详解python中自定义超时异常的几种方法
2019/07/29 Python
pyinstaller打包程序exe踩过的坑
2019/11/19 Python
如何基于Python获取图片的物理尺寸
2019/11/25 Python
python super用法及原理详解
2020/01/20 Python
Python基于Faker假数据构造库
2020/11/30 Python
Python .py生成.pyd文件并打包.exe 的注意事项说明
2021/03/04 Python
物理教育专业毕业生推荐信
2013/11/03 职场文书
我心目中的好老师活动方案
2014/08/19 职场文书
甲乙双方合作协议书
2014/10/13 职场文书
《藏戏》教学反思
2016/02/23 职场文书
HTML5简单实现添加背景音乐的几种方法
2021/05/12 HTML / CSS
SQL Server使用导出向导功能
2022/04/08 SQL Server