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中基本符号及使用方法
Mar 23 PHP
基于在生产环境中使用php性能测试工具xhprof的详解
Jun 03 PHP
php对图像的各种处理函数代码小结
Jul 08 PHP
php命名空间学习详解
Feb 27 PHP
PHP根据传来的16进制颜色代码自动改变背景颜色
Jun 13 PHP
thinkphp实现上一篇与下一篇的方法
Dec 08 PHP
php实现格式化多行文本为Js可用格式
Apr 15 PHP
PHP超全局数组(Superglobals)介绍
Jul 01 PHP
SAE实时日志接口SDK用法示例
Oct 09 PHP
php实现图片按比例截取的方法
Feb 06 PHP
laravel5.2表单验证,并显示错误信息的实例
Sep 29 PHP
php实现根据身份证获取精准年龄
Feb 26 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
西德产收音机
2021/03/01 无线电
php生成SessionID和图片校验码的思路和实现代码
2009/03/10 PHP
php 网页游戏开发入门教程一(webgame+design)
2009/10/26 PHP
Laravel手动返回错误码示例
2019/10/22 PHP
js计数器代码
2006/11/04 Javascript
两种简单实现菜单高亮显示的JS类代码
2010/06/27 Javascript
javascript自执行函数之伪命名空间封装法
2010/12/25 Javascript
JavaScript高级程序设计 读书笔记之八 Function类及闭包
2012/02/27 Javascript
JavaScript极简入门教程(二):对象和函数
2014/10/25 Javascript
nodejs教程之入门
2014/11/21 NodeJs
纯javascript实现图片延时加载方法
2015/08/21 Javascript
基于jquery实现下拉框美化特效
2016/02/02 Javascript
实例剖析AngularJS框架中数据的双向绑定运用
2016/03/04 Javascript
Ionic学习日记实现验证码倒计时
2018/02/08 Javascript
vue2.0 使用element-ui里的upload组件实现图片预览效果方法
2018/09/04 Javascript
Node.js折腾记一:读指定文件夹,输出该文件夹的文件树详解
2019/04/20 Javascript
vue 动态组件用法示例小结
2020/03/06 Javascript
ant design vue导航菜单与路由配置操作
2020/10/28 Javascript
安装Python和pygame及相应的环境变量配置(图文教程)
2017/06/04 Python
Python面向对象编程之继承与多态详解
2018/01/16 Python
在Pycharm中自动添加时间日期作者等信息的方法
2019/01/16 Python
浅谈pytorch卷积核大小的设置对全连接神经元的影响
2020/01/10 Python
详解Python中list[::-1]的几种用法
2020/11/16 Python
京东港澳售:京东直邮港澳台
2018/01/31 全球购物
工业学校毕业生自荐书
2014/01/03 职场文书
便利店投资的创业计划书
2014/01/12 职场文书
四年级下册教学反思
2014/02/01 职场文书
专科生就业求职信
2014/06/22 职场文书
奉献家乡演讲稿
2014/09/13 职场文书
授权委托书怎么写
2014/09/25 职场文书
六查六看自查报告
2014/10/14 职场文书
企业战略合作意向书
2015/05/08 职场文书
机器人总动员观后感
2015/06/09 职场文书
工作表现证明
2015/06/15 职场文书
vue3如何优雅的实现移动端登录注册模块
2021/03/29 Vue.js
python区块链持久化和命令行接口实现简版
2022/05/25 Python