PHP 简单的加密解密方法
2024-08-25 19:55:43
本算法的基础:给定字符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;
}
最新文章
- Struts2+Spring+Hibernate(SSH)框架的搭建
- Python语言特性之3:@staticmethod和@classmethod
- java求素数和求一个数的一个正整数的质因数
- Python:C语言扩展
- .net平台 .net Framework 组织结构 .net Framework类库 CLR C# 介绍
- linux剪切拷贝
- Jquery_Ajax文件上传
- 【C# -- OpenCV】Emgu CV 第一个实例
- Object.Instantiate 实例
- CentOS7安装MySQL的方法之RPM包方式
- Java开发知识之Java的数字处理类Math类
- [物理学与PDEs]第5章习题3 第二 Piola 应力张量的对称性
- Workerman创建聊天室实例
- scrapy 在迭代爬取时被拒 offsite 增加dont_filter=True
- Django 学习第六天——Django模型基础第一节
- 单片机软件proteus的汉化步骤
- 极路由hc5661安装tcpdump
- Shell脚本中";command not found";报错处理
- 深入Java内存模型之阅读理解(1)
- Spring MVC post请求乱码解决
热门文章
- hdu1496 打表
- ReportView动态加载带参数的RDCL文件及子报表
- JVM笔记4-对象的创建
- JavaScript获取当前日期
- 芝麻HTTP:Python爬虫进阶之Scrapy框架安装配置
- 非空校验的提示按钮(shiro项目中来的六)
- 异常-----freemarker.template.TemplateException: The only legal comparisons are between two numbers, two strings, or two dates
- 主流nosql数据库对比
- 基于python机器学习人脸自动补全
- jpgraph 折线图--解决中文乱码的问题(标题和图例)