这里讲解一下php里的对称加密算法,很简单,使用base64的方法,不过也挺实用的。复杂的也有,比如AES,DES等

前几天突发奇想要往数据库里保存一些机密的东西,然后就想着怎么让别人即使进入到了数据库也看不懂存储的是什么,那么只有加密了;可是我们自己还要看呢,那只能找一些对称加密的算法了,我们想看的时候再解密回来。

在网上找到了一个不错的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 '

';

echo "string : " . $content . "
";

echo "encode : " . ($enstring = encode($content)) . '
';

echo "decode : " . decode($enstring);

exit();

上面的算法里我们可以看到:我们把base64_encode()产生的字符中插入我们提前设定的密钥,然后再把里面的特殊字符进行替换,即使别人看到这样的字符串也不知道是什么。当然,这里我们再稍微的改进下,比如把密钥倒着插入到字符串里,密钥base64后再进行插入等等,插入密钥后再base64一次。

当然解密就是加密的反方向了,思考了一会儿才知道解密的原理:之前我们在字符串里插入了一些字符,现在解密时我们就要把他摘出来,首先把加密后的字符串按每个数组里2个元素进行分组,然后判断第二个字符是不是密钥里的,如果是,那么第一个字符就是原来base64里的字符。

当然在php里除了base64实现加密和解密外,还有AES和DES等算法,以后有时间了会更加详细的讲解这两种算法

php对称算法_php里简单的对称加密算法相关推荐

  1. python自带的对称算法_一种基于对称算法和专用加载模块的Python程序模块加密方法...

    一种基于对称算法和专用加载模块的Python程序模块加密方法 [专利说明]一种基于对称算法和专用加载模块的Python程序模块加密方法 技术领域 [0001]本发明涉及一种网络安全技术,具体涉及一种P ...

  2. php对称字符串,PHP实现简单的对称加密和解密方法 - str_split

    ...获取指定值自定义函数代码 Oracle CREATE OR REPLACE TYPE ty_tbl_str_split IS TABLE OF ty_row_str_split CREATE O ...

  3. 公钥和私钥的完全解释(包括对称算法和非对称算法、RSA解释)

    密钥分为两种:对称密钥与非对称密钥 对称密钥加密,又称私钥加密,即信息的发送方和接收方用一个密钥去加密和解密数据.它的最大优势是加/解密速度快,适合于对大数据量进行加密,但密钥管理困难. 非对称密钥加 ...

  4. Linux crypto相关知识的汇总 Linux加密框架crypto对称算法和哈希算法加密模式

    参考链接 Linux加密框架中的算法和算法模式(二)_家有一希的博客-CSDN博客 对称算法 分组算法模式 ECB模式 ECB模式下,明文数据被分为大小合适的分组,然后对每个分组独立进行加密或解密 如 ...

  5. 数据传输加密——非对称加密算法RSA+对称算法AES(适用于java,android和Web)

    本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 转载请注明出处:http://blog.csdn.net/chay_chan/article/details/58605605 数据 ...

  6. 数据传输加密非对称加密算法以及对称算法-RSA+AES

    转载:http://blog.csdn.net/chay_chan/article/details/58605605 源码:https://github.com/Javen205/IJPay 数据传输 ...

  7. 常用的安全算法-数字摘要、对称加密、非对称加密详解

    本文仅介绍摘要算法.对称加密算法.非对称加密算法的使用场景和使用方法. 1.数字摘要 说明:数字摘要是将任意长度的消息变成固定长度的短消息,它类似于一个自变量是消息的函数,也就是Hash函数.数字摘要 ...

  8. 对称加密算法(AES加密)以及对称算法与非对称算法的对比

    概述 对称加密算法就是传统的用一个密码进行加密和解密.例如,我们常用的WinZIP 和WinRAR对压缩包的加密和解密,就是使用对称加密算法:         从程序的角度着,所谓加密,就是这样一个函 ...

  9. strongswan对称算法plugin

    文章目录 面向对象-父类 面向对象-子类 插件PLUGIN libstrongswan库初始化算法和加载插件 算法使用 面向对象-父类 strongswan/src/libstrongswan/cry ...

最新文章

  1. 51CTO交流摘录(1):SOC的定义、适用性和组成
  2. 【leetcode77】Single Number
  3. sql读取 获取子节点 父节点
  4. Java:cmd命令行中 错误: 找不到或无法加载主类(从原理出发讲解!)
  5. 电脑自带的服务器修复,还原或修复运行 Windows Server Essentials 的服务器
  6. python zen_The Zen of Python(Python 之禅) - by Tim Peters
  7. w10电脑c盘满了怎么清理_快速清理:Win10系统C盘满了怎么办?
  8. 超详细图文介绍,华为桌面云解决方案
  9. 简明Python教程链接
  10. Bypass 360主机卫士SQL注入防御(多姿势)
  11. 学习Matlab的第一个程序——用二分法求根
  12. 破解安居家数字加密成功爬取
  13. 生成对抗式网络 (GAN) 及其应用
  14. P2-前端基础-网页中的实体(转义字符)
  15. Unknown column 'JOIN.id' in 'order clause'和 Unknown column 'XXXX.id' in 'order clause'的解决办法
  16. C# 获取 checkbox选中的值
  17. 关于“给PHP源代码加密“的代码分析
  18. AutoRunner怎么做脚本参数化实现用例的自动化批量执行
  19. 计算机专业的三行情书,这是我们专业的三行情书,请查收
  20. 海投简历无回应?是不是你写简历的方式错了?

热门文章

  1. SourceInsight 4.0 之一 设置项目的相对路径(可任意移动位置)
  2. Linux C :线程操作和线程同步的多线程并发编程
  3. Linux opencv安装与编译
  4. eclipse / 绑定 OpenJDK 1.8 Java 源码的方法
  5. 邮件服务器收件人数量限制,邮件服务器DBMail
  6. mysql timestamp 插入null报错_读MySQL 5.7文档11.2 Date and Time Data Types总结
  7. JAVA个go哪个写web方便_Go语言实现的一个简单Web服务器
  8. c++ 数组置0_0基础学习C语言第七章:数组(1)
  9. 高清HDMI接口保护用TVS二极管阵列选型
  10. 项目中用到的语音识别方案 硬件/软件相关介绍