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 相关文章推荐
mysql5详细安装教程
Jan 15 PHP
php header示例代码(推荐)
Sep 08 PHP
注册页面之前先验证用户名是否存在的php代码
Jul 14 PHP
PHP实现伪静态方法汇总
Jan 13 PHP
必须收藏的php实用代码片段
Feb 02 PHP
PHP生成及获取JSON文件的方法
Aug 23 PHP
php 的反射详解及示例代码
Aug 25 PHP
php微信公众平台开发(一) 配置接口
Dec 06 PHP
Yii2实现增删改查后留在当前页的方法详解
Jan 13 PHP
深入解析PHP中SESSION反序列化机制
Mar 01 PHP
thinkPHP5.0框架配置格式、加载解析与读取方法
Mar 17 PHP
PHP+jQuery实现滚屏无刷新动态加载数据功能详解
May 04 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读取javascript设置的cookies的代码
2010/04/12 PHP
PHP如何防止用户重复提交表单
2020/12/09 PHP
漂亮的仿flash菜单,来自蓝色经典
2006/06/26 Javascript
基于JavaScript实现继承机制之原型链(prototype chaining)的详解
2013/05/07 Javascript
JavaScript的strict模式与with关键字介绍
2014/02/08 Javascript
使用 js+正则表达式为关键词添加链接
2014/11/11 Javascript
node.js中的fs.statSync方法使用说明
2014/12/16 Javascript
node.js cookie-parser 中间件介绍
2016/06/06 Javascript
简单实现jQuery进度条轮播实例代码
2016/06/20 Javascript
bootstrapfileinput实现文件自动上传
2016/11/08 Javascript
JavaScript实现经典排序算法之选择排序
2016/12/28 Javascript
Javascript Event(事件)的传播与冒泡
2017/01/23 Javascript
vue router 源码概览案例分析
2018/10/09 Javascript
react高阶组件添加和删除props
2019/04/26 Javascript
vue实现鼠标经过动画
2019/10/16 Javascript
原生js实现随机点名功能
2019/11/05 Javascript
微信小程序实现轨迹回放的示例代码
2019/12/13 Javascript
python实现简单的TCP代理服务器
2014/10/08 Python
Python针对给定列表中元素进行翻转操作的方法分析
2018/04/27 Python
Python 删除整个文本中的空格,并实现按行显示
2018/07/24 Python
Python实现一个数组除以一个数的例子
2019/07/20 Python
tensorflow2.0与tensorflow1.0的性能区别介绍
2020/02/07 Python
Python使用windows设置定时执行脚本
2020/11/12 Python
美国购买舞会礼服网站:Couture Candy
2019/12/29 全球购物
新护士岗前培训制度
2014/02/02 职场文书
党员组织关系介绍信
2014/02/13 职场文书
初中学生评语大全
2014/04/24 职场文书
公共场所禁烟倡议书
2014/08/30 职场文书
社区务虚会发言材料
2014/10/20 职场文书
工伤私了协议书范本
2014/11/24 职场文书
专职安全员岗位职责
2015/04/11 职场文书
2015年全国爱眼日活动方案
2015/05/05 职场文书
写给女朋友的检讨书
2015/05/06 职场文书
python 爬取豆瓣网页的示例
2021/04/13 Python
《Estab Life》4月6日播出 正式PV、主视觉图公开
2022/03/20 日漫
Windows Server 2008配置防火墙策略详解
2022/06/28 Servers