本算法的基础:给定字符A B,A^B=C,C^B=A,即两次异或运算可得到原字符。实现代码如下:

/**
* @desc加密
* @param string $str 待加密字符串
* @param string $key 密钥
* @return string
*/
function encrypt($str, $key){
$mixStr = md5(date('Y-m-d H:i:s').rand(1000));
$tmp = '';
$strLen = strlen($str);
for($i=0, $j=0; $i<$strLen; $i++, $j++){
$j = $j == 32 ? 0 : $j;
$tmp .= $mixStr[$j].($str[$i] ^ $mixStr[$j]);
}
return base64_encode(bind_key($tmp, $key));
} /**
* @desc解密
* @param string $str 待解密字符串
* @param string $key 密钥
* @return string
*/
function decrypt($str, $key){
$str = bind_key(base64_decode($str), $key);
$strLen = strlen($str);
$tmp = '';
for($i=0; $i<$strLen; $i++){
$tmp .= $str[$i] ^ $str[++$i];
}
return $tmp;
} /**
* @desc辅助方法 用密钥对随机化操作后的字符串进行处理
* @param $str
* @param $key
* @return string
*/
function bind_key($str, $key){
$encrypt_key = md5($key); $tmp = '';
$strLen = strlen($str);
for($i=0, $j=0; $i<$strLen; $i++, $j++){
$j = $j == 32 ? 0 : $j;
$tmp .= $str[$i] ^ $encrypt_key[$j];
}
return $tmp;
}

最新文章

  1. Struts2+Spring+Hibernate(SSH)框架的搭建
  2. Python语言特性之3:@staticmethod和@classmethod
  3. java求素数和求一个数的一个正整数的质因数
  4. Python:C语言扩展
  5. .net平台 .net Framework 组织结构 .net Framework类库 CLR C# 介绍
  6. linux剪切拷贝
  7. Jquery_Ajax文件上传
  8. 【C# -- OpenCV】Emgu CV 第一个实例
  9. Object.Instantiate 实例
  10. CentOS7安装MySQL的方法之RPM包方式
  11. Java开发知识之Java的数字处理类Math类
  12. [物理学与PDEs]第5章习题3 第二 Piola 应力张量的对称性
  13. Workerman创建聊天室实例
  14. scrapy 在迭代爬取时被拒 offsite 增加dont_filter=True
  15. Django 学习第六天——Django模型基础第一节
  16. 单片机软件proteus的汉化步骤
  17. 极路由hc5661安装tcpdump
  18. Shell脚本中&quot;command not found&quot;报错处理
  19. 深入Java内存模型之阅读理解(1)
  20. Spring MVC post请求乱码解决

热门文章

  1. hdu1496 打表
  2. ReportView动态加载带参数的RDCL文件及子报表
  3. JVM笔记4-对象的创建
  4. JavaScript获取当前日期
  5. 芝麻HTTP:Python爬虫进阶之Scrapy框架安装配置
  6. 非空校验的提示按钮(shiro项目中来的六)
  7. 异常-----freemarker.template.TemplateException: The only legal comparisons are between two numbers, two strings, or two dates
  8. 主流nosql数据库对比
  9. 基于python机器学习人脸自动补全
  10. jpgraph 折线图--解决中文乱码的问题(标题和图例)