PHP字符串自定义加密解密函数详解与实现

沿途有光
沿途有光
发布时间:2026-10-13 | 4人浏览过
原创

针对PHP项目中需要自定义加密解密的场景,如传递非敏感但需防篡改的参数,本文章介绍了一个基于 XOR 异或运算与动态密钥的加解密类库实现。该方法包含加密入口、解密入口及辅助处理函数,适用于快速集成。

原理概述

该套函数主要利用 XOR(异或)运算的可逆特性:若 A ^ B = C,则 C ^ B = A。通过生成一个随机的临时密钥进行异或混淆,并使用 MD5 摘要固定最终加密密钥的长度,配合 base64_encode 将二进制数据转为可读字符串,从而实现简单的字符串隐藏与防篡改机制。

准备工作

确保 PHP 环境支持以下内置函数:
- srand, microtime: 随机数种子
- md5: 哈希算法
- strlen, substr (隐含在数组访问中): 字符串操作
- base64_encode, base64_decode: 编码转换

核心代码实现

第1步:加密函数 passport_encrypt

目的: 将明文转换为不可读的密文字符串。

参数: $str (待加密字符串), $key (用户提供的密钥)

操作逻辑:

  • 初始化随机种子,并生成一个基于随机整数的 MD5 临时密钥 $encrypt_key。
  • 遍历原文 $str 的每个字符,将其与临时密钥对应位置的字符进行异或运算,构建混淆串 $tmp。
  • 调用辅助函数 passport_key 再次对混淆串进行处理,最终经 base64_encode 输出。

/* 
*功能:对字符串进行加密处理 
*参数一:需要加密的内容 
*参数二:密钥 
*/ 
function passport_encrypt($str,$key){
    srand((double)microtime() * 1000000);
    $encrypt_key=md5(rand(0, 32000));
    $ctr=0;
    $tmp='';
    for($i=0;$i<strlen($str);$i++){
        $ctr=$ctr==strlen($encrypt_key)?0:$ctr;
        $tmp.=$encrypt_key[$ctr].($str[$i] ^ $encrypt_key[$ctr++]);
    }
    return base64_encode(passport_key($tmp,$key));
}

第2步:解密函数 passport_decrypt

目的: 将密文还原为原始明文。

参数: $str (密文), $key (与原加密相同的密钥)

操作逻辑:

  • 首先使用 base64_decode 解码密文,并通过 passport_key 去除第二层密钥干扰。
  • 遍历处理后的字符串,提取每两位中的第一位作为当前位的“掩码”,将其与下一位字符进行异或运算,还原原始字符。

/* 
*功能:对字符串进行解密处理 
*参数一:需要解密的密文 
*参数二:密钥 
*/ 
function passport_decrypt($str,$key){
    $str=passport_key(base64_decode($str),$key);
    $tmp='';
    for($i=0;$i<strlen($str);$i++){
        $md5=$str[$i];
        $tmp.=$str[++$i] ^ $md5;
    }
    return $tmp;
}

第3步:辅助函数 passport_key

目的: 统一密钥处理逻辑,对输入字符串与用户密钥进行异或混合。

参数: $str (待处理字符串), $encrypt_key (用户密钥)


/* 
*辅助函数:对字符串与密钥进行异或混合 
*/ 
function passport_key($str,$encrypt_key){
    $encrypt_key=md5($encrypt_key);
    $ctr=0;
    $tmp='';
    for($i=0;$i<strlen($str);$i++){
        $ctr=$ctr==strlen($encrypt_key)?0:$ctr;
        $tmp.=$str[$i] ^ $encrypt_key[$ctr++];
    }
    return $tmp;
}

使用示例

以下是完整的测试用例,展示如何调用上述函数进行加密与解密验证:


$str='作者:余浩苗;电话:13611972365;电子邮件:123cvbz@163.com';
$key='hacker';

// 执行加密
$encrypt=passport_encrypt($str,$key);

// 执行解密
$decrypt=passport_decrypt($encrypt,$key);

echo '原文:',$str."<br><hr>";
echo '密文:',$encrypt."<br><hr>";
echo '译文:',$decrypt."<br><hr>";

注意事项

  1. 安全性限制: 此方法属于自定义简易加密,主要用于防止普通浏览者直接查看数据内容或简单的 URL 参数篡改,并非密码学意义上的强加密标准。敏感数据(如密码、金融信息)建议使用 openssl 扩展或成熟的加密库。
  2. 密钥一致性: 加密和解密必须使用完全相同的 $key 参数,否则无法还原数据。
  3. 编码问题: 由于中间过程涉及异或运算产生的非文本字符,最终输出依赖 base64 保证传输稳定性。

以上就是PHP自定义加密解密函数的详细内容,更多关于PHP数据安全处理的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表