|
本帖最后由 QAQ 于 2019-4-18 17:01 编辑
- <?php
- header("Content-type: text/html; charset=gb2312");
- /*
- 数据加密与解密 (自定义哈希函数+异或实现)
- 加密和解密必须使用一致的密码和哈希函数,否则将出错
- 参数1:要加密或解密的数据
- 参数2:密码
- 参数3:自定义散列函数名 (留空默认为md5)
- 回调的函数名必须真实有效,需要提供两个参数:
- 参数1:规定要计算的字符串。
- 参数2:规定十六进制或二进制输出格式(默认提交TRUE):
- TRUE - 原始 16 字符二进制格式
- FALSE - 默认。32 字符十六进制数
- 每次返回的散列长度必须一致,否则会出现异常。
- */
- function dxead($data,$password,$hash_name="md5"){
- $hash = $password;
- $hl = strlen($hash_name(null,1));
- $len = strlen($data);
- $j = 0;
- $gn = floor($len/$hl)+1;
- do {
- $hash = $hash_name($hash,1);
- $e = $gn == 1 ? $len % $hl : $hl;
- for($i=0;$i<$e;$i++){
- $data[$j] = chr(ord($hash[$i]) ^ ord($data[$j]));
- $j++;
- }
- } while(--$gn);
- return $data;
- }
- $a = dxead("Hello World!1234567890 中文测试","1234567","md5");
- echo $a."<br>";
- $a = dxead($a,"1234567","md5");
- echo $a;
- ?>
复制代码 |
|