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 相关文章推荐
SMARTY学习手记
Jan 04 PHP
用PHP与XML联手进行网站编程代码实例
Jul 10 PHP
PHP 创建文件(文件夹)以及目录操作代码
Mar 04 PHP
php中几种常见安全设置详解
Apr 06 PHP
PHP 简易输出CSV表格文件的方法详解
Jun 20 PHP
php cURL和Rolling cURL并发方式比较
Oct 30 PHP
PHP中让curl支持sock5的代码实例
Jan 21 PHP
从性能方面考虑PHP下载远程文件的3种方法
Dec 29 PHP
php 实现Hash表功能实例详解
Nov 29 PHP
php str_replace替换指定次数的方法详解
May 05 PHP
iis6手工创建网站后无法运行php脚本的解决方法
Jun 08 PHP
对laravel的session获取与存取方法详解
Oct 08 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 skymvc 一款轻量、简单的php
2011/06/28 PHP
PHP的PDO操作简单示例
2016/03/30 PHP
js中关于一个分号的崩溃示例
2013/11/11 Javascript
js小数运算出现多位小数如何解决
2015/10/08 Javascript
jQuery选择器基础入门教程
2016/05/10 Javascript
jQuery实现鼠标经过时高亮,同时其他同级元素变暗的效果
2016/09/18 Javascript
JS实战篇之收缩菜单表单布局
2016/12/10 Javascript
Express URL跳转(重定向)的实现方法
2017/04/07 Javascript
React实践之Tree组件的使用方法
2017/09/30 Javascript
快速解决bootstrap下拉菜单无法隐藏的问题
2018/08/10 Javascript
JS学习笔记之贪吃蛇小游戏demo实例详解
2019/05/29 Javascript
ES6 Object方法扩展的应用实例分析
2019/06/25 Javascript
jQuery实现轮播图源码
2019/10/23 jQuery
微信小程序getLocation 需要在app.json中声明permission字段
2020/03/03 Javascript
vue用elementui写form表单时,在label里添加空格操作
2020/08/13 Javascript
比较详细Python正则表达式操作指南(re使用)
2008/09/06 Python
Python通过websocket与js客户端通信示例分析
2014/06/25 Python
Python随机生成数模块random使用实例
2015/04/13 Python
详解Python的Twisted框架中reactor事件管理器的用法
2016/05/25 Python
Android基于TCP和URL协议的网络编程示例【附demo源码下载】
2018/01/23 Python
CentOS 7 安装python3.7.1的方法及注意事项
2018/11/01 Python
Python3中的最大整数和最大浮点数实例
2019/07/09 Python
Python利用requests模块下载图片实例代码
2019/08/12 Python
澳大利亚领先的在线机械五金、园艺和存储专家:Edisons
2018/03/24 全球购物
Vision Direct比利时:在线订购隐形眼镜
2019/08/27 全球购物
英国家居用品和床上用品零售商:P&B Home
2020/01/16 全球购物
保安员岗位职责
2013/11/17 职场文书
简历自我评价怎么写呢?
2014/01/06 职场文书
报关报检委托书
2014/04/08 职场文书
诚信承诺书模板
2014/05/26 职场文书
致800米运动员广播稿(10篇)
2014/10/17 职场文书
校本课程教学计划
2015/01/19 职场文书
雷锋电影观后感
2015/06/10 职场文书
2015年公司中秋节致辞
2015/07/31 职场文书
如何使用JavaScript策略模式校验表单
2021/04/29 Javascript
解决pytorch 损失函数中输入输出不匹配的问题
2021/06/05 Python