分享一个简单的可逆加密解密算法

1.基本原理

(1)使用base64_encode和base64_decode函数作为可逆的加密和解密工作函数

(2)把base64_encode出来的字符串通过某种方式进行分拆组成新的字符串实现加密

(3)把字符串通过逆向的分拆组成原来生成的base64_encode出来的字符串,再用base64_decode函数实现解密

2.具体实现

(1)需求,用户登录后,需要把phone和password存储到cookie中,但是为了让cookie中的数据更安全,如隐藏phone这个隐私信息,同时又方便服务器读取解密实现自动登录

(2)代码如下:

// phone为11位,password为md5加密后的32位字符串
$user_info = ['phone'=>12345678901, 'password'=>'1qaz2wsx3edc4rfv5tgb6yhn7ujm8ikk'];
// 转为json字符串,可存入cookie,但有些信息可能会暴露
// -------------以下为加密方法----------------
$json = json_encode($user_info);
// {"phone":12345678901,"password":"1qaz2wsx3edc4rfv5tgb6yhn7ujm8ikk"}
// 转为base64字符串
$b64 = base64_encode($json);
// eyJwaG9uZSI6MTIzNDU2Nzg5MDEsInBhc3N3b3JkIjoiMXFhejJ3c3gzZWRjNHJmdjV0Z2I2eWhuN3VqbThpa2sifQ==
// 长度为92,可以用"_"等字符补齐
$fade_b64 = $b64.'________';
// eyJwaG9uZSI6MTIzNDU2Nzg5MDEsInBhc3N3b3JkIjoiMXFhejJ3c3gzZWRjNHJmdjV0Z2I2eWhuN3VqbThpa2sifQ==________
// 把得到的字符串按10的长度分割为10份
$line_arr = [];
for($i = 0; $i < 10; $i++) {$line_arr[] = substr($fade_b64, $i*10, 10);
}
// Array (
//      [0] => eyJwaG9uZS |
//      [1] => I6MTIzNDU2 |
//      [2] => Nzg5MDEsIn |
//      [3] => Bhc3N3b3Jk |
//      [4] => IjoiMXFhej |
//      [5] => J3c3gzZWRj |
//      [6] => NHJmdjV0Z2 |
//      [7] => I2eWhuN3Vq |
//      [8] => bThpa2sifQ |
//      [9] => ==________ V
//      先组装第一列eINBIJNIb=
//      以此类推
//  )
// 对分割好的字符串进行重新组装
$sign = '';
for($i = 0; $i < 10; $i++) {for($j = 0; $j < 10; $j++) {$sign .= $line_arr[$j][$i];}
}
// 得到最终的加密串
// eINBIJNIb=y6zhj3H2T=JMgcocJeh_wT53i3mWp_aIMNMgdha_GzD3Xzju2_9NEbFZVNs_uDs3hW03i_ZUIJeRZVf_S2nkjj2qQ_// -------------以下为解密方法----------------
// 把字符串分为10为单位的10份
$line_arr = [];
for($i = 0; $i < 10; $i++) {$line_arr[] = substr($sign, $i*10, 10);
}
//
// Array (
//      [0] => eINBIJNIb= |
//      [1] => y6zhj3H2T= |
//      [2] => JMgcocJeh_ |
//      [3] => wT53i3mWp_ |
//      [4] => aIMNMgdha_ |
//      [5] => GzD3Xzju2_ |
//      [6] => 9NEbFZVNs_ |
//      [7] => uDs3hW03i_ |
//      [8] => ZUIJeRZVf_ |
//      [9] => S2nkjj2qQ_ V
//      先组装第一列eyJwaG9uZS
//      以此类推
//  )
//
$fade_b64 = '';
for($i = 0; $i < 10; $i++) {for($j = 0; $j < 10; $j++) {$fade_b64 .= $line_arr[$j][$i];}
}
// 得到伪装过的b64字符串
// eyJwaG9uZSI6MTIzNDU2Nzg5MDEsInBhc3N3b3JkIjoiMXFhejJ3c3gzZWRjNHJmdjV0Z2I2eWhuN3VqbThpa2sifQ==________
$b64 = substr($fade_b64, 0, 92);
// 取出混淆字符串"_"
// eyJwaG9uZSI6MTIzNDU2Nzg5MDEsInBhc3N3b3JkIjoiMXFhejJ3c3gzZWRjNHJmdjV0Z2I2eWhuN3VqbThpa2sifQ==
$json = base64_decode($b64);
// 最终得到加密前的数据
// {"phone":12345678901,"password":"1qaz2wsx3edc4rfv5tgb6yhn7ujm8ikk"}

3.应用场景

此种加密方法实现简单,可以把信息存储在像cookie这种暴露出来的应用中

4.这只是想到的一种比较简单的可逆的加密解密方式,数据组装部分用了最简单的 “ 按列从上到下 ” 组装的方式,破解可能会比较容易,也可以用 " 按列从上到下,从下到上 " 混合、“ 对角线 ” 方法等,然后再加以字符的统一替换,如 a 全部替换为 A 等替换法,可以使加密效果更好,更不容易破解。最近用到了这种算法,与大家分享,当抛砖引玉了~用心,多动脑,就算是用php这种超级简单的语言,也可以做出厉害的东西!

简易可逆加密解密算法相关推荐

  1. 一组PHP可逆加密解密算法

    对于大部分密码加密,我们可以采用md5.sha1等方法.可以有效防止数据泄露,但是这些方法仅适用于无需还原的数据加密. 对于需要还原的信息,则需要采用可逆的加密解密算法. 下面一组PHP函数是实现此加 ...

  2. php中文加密解密算法,一组PHP可逆加密解密算法

    对于大部分密码加密,我们可以采用md5.sha1等方法.可以有效防止数据泄露,但是这些方法仅适用于无需还原的数据加密. 对于需要还原的信息,则需要采用可逆的加密解密算法. 下面一组PHP函数是实现此加 ...

  3. md5加密以及可逆的加密解密算法

    md5加密 package gov.mof.fasp2.gcfr.adjustoffset.adjust; import java.security.MessageDigest; public cla ...

  4. AES加密解密算法Java实现

    AES加密算法是密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先的DE ...

  5. 简单的加密/解密算法_/c++

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/qq_36557960/article/details/79299093 关于加密和解密问题,有的加密 ...

  6. 异或(XOR)运算加密/解密算法

    本文将介绍一个简单易用的加密/解密算法:使用异或(XOR)运算.本算法原理简单,旨在使读者对信息的加密/解密有一个更加直观的印象. XOR算法原理 从加密的主要方法看,换位法过于简单,特别是对于数据量 ...

  7. RSA、MD5加密解密算法全套解析安装教程

    第一部分介绍加密解密算法, 第二部分介绍我小组成功应用的RSA.MD5两种加密解密算法,以及心得体会. 1.加密解密算法介绍 应用的开发中安全很重要,所以信息加密技术显得尤为重要.我们需要对应用中的多 ...

  8. 提供一个基于.NET的加密/解密算法

    提供一个基于.NET SymmetricAlgorithm 类的.带私钥的加密/解密算法的包装类.使用方法: symmcrypto de = new SymmCrypto(SymmCrypto.Sym ...

  9. C#的加密解密算法,包括Silverlight的MD5算法

    C#的加密解密算法,包括Silverlight的MD5算法 下面是一段加密解密工具类,其中的WinFormMD5Encrypt方法可以使得Winform和WebForm下的MD5加密结果一致,默认他们 ...

最新文章

  1. sumif三个条件怎么填_Excel条件求和函数sumif详解及应用
  2. MATLAB红色分量图如何合成,如何修改一张图片中红色分量的值?
  3. 通过MATLAB将数据转化为mif文件,供Quartusii软件的ROM核读取调用
  4. java服务端的 极光推送
  5. mongoDB 从单节点迁移到分布式集群 遇到的问题
  6. 最新最全产品删除页代码
  7. 【C++ Priemr | 15】面向对象程序设计
  8. Win 10 更新,Linux 内核的 WSL 2 开始上线
  9. linux init.d 密码,Linux基础之init.d、rc.local
  10. oracle日志不应用,dg报ORA-600日志不能应用
  11. Ado.net的连接池
  12. c++编写COM组件,并使用该组件
  13. 吴恩达张潼接受WSJ采访:如何让AI像电力一样颠覆世界?
  14. 1.maya基本操作
  15. 重磅!微信二维码引擎OpenCV开源!3行代码让你拥有微信扫码能力
  16. 一劳永逸的解决jquery的本地引入的方法
  17. 利用RunLoop空闲时间执行预缓存任务
  18. pat B1032 挖掘机技术哪家强 (20分)
  19. cad等比例缩放快捷键_CAD中怎么才能将图案等比例缩放?
  20. Android跟我一起来开发--微影之架构篇

热门文章

  1. Filezilla 显示器驱动程序已停止响应 并且已恢复
  2. 中小企业如何推广高优产品
  3. Java:计算平均数
  4. 利用Java操作Office2007成为可能
  5. visio 2016版本的下载与安装配置教程
  6. lnmp如何打开mysql远程访问
  7. c语言的左移运算,C语言中的左移和右移运算.docx
  8. mysql删除列的指令_Mysql 修改列,增加列,删除列常用指令
  9. Android的简易备忘录
  10. 用原生js实现map方法