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来处理多个提交任务
Oct 09 PHP
自己动手做一个SQL解释器
Oct 09 PHP
vBulletin HACK----关于排版的两个HACK
Oct 09 PHP
PHP 危险函数全解析
Sep 09 PHP
joomla内置的表单验证功能使用方法
Jun 11 PHP
PHP中输出转义JavaScript代码的实现代码
Apr 22 PHP
ThinkPHP实现支付宝接口功能实例
Dec 02 PHP
php 实现一个字符串加密解密的函数实例代码
Nov 01 PHP
利用ajax和PHP实现简单的流程管理
Mar 23 PHP
PHP后台微信支付和支付宝支付开发
Apr 28 PHP
php实现微信企业转账功能
Oct 02 PHP
PHP使用mysqli同时执行多条sql查询语句的实例
Mar 22 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的cURL快速入门教程 (小偷采集程序)
2011/06/02 PHP
php数组函数序列之end() - 移动数组内部指针到最后一个元素,并返回该元素的值
2011/10/31 PHP
PHP内存缓存Memcached类实例
2014/12/08 PHP
PHP编程中的__clone()方法使用详解
2015/11/27 PHP
php+js实现裁剪任意形状图片
2018/10/31 PHP
PHP递归的三种常用方式
2019/02/28 PHP
[转]JS宝典学习笔记
2007/02/07 Javascript
JQuery浮动DIV提示信息并自动隐藏的代码
2010/08/29 Javascript
初识JQuery 实例一(first)
2011/03/16 Javascript
Angular中的Promise对象($q介绍)
2015/03/03 Javascript
jQuery插件cxSelect多级联动下拉菜单实例解析
2016/06/24 Javascript
AngularJS中watch监听用法分析
2016/11/04 Javascript
javascript数据结构中栈的应用之符号平衡问题
2017/04/11 Javascript
NodeJs中express框架的send()方法简介
2017/06/20 NodeJs
Angular CLI在Angular项目中如何使用scss详解
2018/04/10 Javascript
详解基于vue-cli3.0如何构建功能完善的前端架子
2018/10/09 Javascript
原生JS实现手动轮播图效果实例代码
2018/11/22 Javascript
vuejs简单验证码功能完整示例
2019/01/08 Javascript
vue-cli2 构建速度优化的实现方法
2019/01/08 Javascript
VueCli3.0中集成MockApi的方法示例
2019/07/05 Javascript
微信小程序开发之map地图组件定位并手动修改位置偏差
2019/08/17 Javascript
[04:09]显微镜下的DOTA2第十二期—NaVi美如画的团战
2014/06/23 DOTA
python中logging包的使用总结
2018/02/28 Python
Python中return self的用法详解
2018/07/27 Python
python生成随机红包的实例写法
2019/09/02 Python
python实现的接收邮件功能示例【基于网易POP3服务器】
2019/09/11 Python
numpy ndarray 取出满足特定条件的某些行实例
2019/12/05 Python
使用Python将图片转正方形的两种方法实例代码详解
2020/04/29 Python
解决python cv2.imread 读取中文路径的图片返回为None的问题
2020/06/02 Python
澳大利亚领先的睡衣品牌:Peter Alexander
2016/08/16 全球购物
澳大利亚票务和娱乐市场领导者:Ticketmaster
2017/03/03 全球购物
保险内勤岗位职责
2014/04/05 职场文书
2014财务人员自我评价范文
2014/09/21 职场文书
2014年小学语文工作总结
2014/12/20 职场文书
茶花女读书笔记
2015/06/29 职场文书
2016应届毕业生就业指导课心得体会
2016/01/15 职场文书