PHP实现简单可逆加密解密算法:代码与逻辑解析

唐可
唐可
发布时间:2026-10-14| 5人浏览过
原创

本文介绍并解析了一种基于PHP的可逆加密解密算法。核心逻辑涉及将用户提供的密钥进行MD5摘要,随后在字符层面执行位移操作,最后辅以Base64编码输出密文。该方法便于快速集成,适合对数据安全等级要求一般且必须保留明文信息的业务场景。

核心实现逻辑

该加密方案的核心在于“加盐”与“移位”。首先,通过 md5() 函数将原始密钥转换为32位的十六进制哈希值,作为后续操作的固定基准。接着,遍历待加密字符串的每一位,将其ASCII码与密钥对应位置的字符ASCII码相加(取模256),生成新的字符序列。最终,利用 base64_encode() 将二进制流转化为安全的URL传输文本。

PHP代码实现

第1步:编写加密函数

目的:生成经过混淆处理的密文字符串。

  • 入口参数:$data(原始明文), $key(自定义密钥)
  • 处理流程
function encrypt($data, $key) {
    // 1. 获取密钥的MD5哈希值(32位)
    $key = md5($key);
    
    $x   = 0;
    $len = strlen($data);
    $l   = strlen($key);
    
    // 2. 扩展密钥长度以匹配数据长度
    // 循环将32位密钥重复拼接,形成临时密钥串
    for ($i = 0; $i < $len; $i++) {
        if ($x == $l) {
            $x = 0;
        }
        $char .= $key{$x};
        $x++;
    }
    
    // 3. 执行字符位移加密
    for ($i = 0; $i < $len; $i++) {
        // ASCII码相加后取模256,模拟字节进位
        $str .= chr(ord($data{$i}) + (ord($char{$i})) % 256);
    }
    
    // 4. 返回Base64编码后的密文
    return base64_encode($str);
}

第2步:编写解密函数

目的:根据密文和相同密钥还原原始明文。

  • 入口参数:$data(待解密的Base64密文), $key(相同密钥)
  • 处理流程
function decrypt($data, $key) {
    // 1. 还原密钥及预处理
    $key = md5($key);
    $x   = 0;
    
    // 先解码为二进制流
    $data = base64_decode($data);
    $len = strlen($data);
    $l   = strlen($key);
    
    // 2. 同样扩展密钥长度
    for ($i = 0; $i < $len; $i++) {
        if ($x == $l) {
            $x = 0;
        }
        $char .= substr($key, $x, 1);
        $x++;
    }
    
    // 3. 逆向位移运算
    for ($i = 0; $i < $len; $i++) {
        // 判断当前字节是否小于密钥对应字节
        if (ord(substr($data, $i, 1)) < ord(substr($char, $i, 1))) {
             // 若发生借位,说明之前加了256,此时需加上256再减
            $str .= chr((ord(substr($data, $i, 1)) + 256) - ord(substr($char, $i, 1)));
        } else {
             // 正常相减
            $str .= chr(ord(substr($data, $i, 1)) - ord(substr($char, $i, 1)));
        }
    }
    
    return $str;
}

第3步:调用与验证

通过定义测试数据和密钥,分别调用上述两个函数,观察控制台输出结果是否一致。

$data = 'PHP加密解密算法';  // 原始信息
$key  = '123';              // 密钥

// 执行加密
$encrypt = encrypt($data, $key);
echo "密文: {$encrypt}\n";

// 执行解密
$decrypt = decrypt($encrypt, $key);
echo "原文: {$decrypt}";

运行结果与特性分析

运行上述代码,系统将输出类似如下内容:

密文: gniCSOzZG+HnS9zcFea7SefNGhXF
原文: PHP加密解密算法

特性说明:

  • 可逆性:只要密钥正确,即可完全还原原始文本。
  • 局限性:该算法依赖简单的ASCII位移,容易被具备基础密码学知识的攻击者通过已知明文攻击破译。它仅适用于防止普通用户查看数据,或用于非敏感信息的临时混淆,不可用于金融支付或重要隐私保护。
  • 依赖性:解密端必须持有与原加密端完全一致的密钥,否则无法还原出有意义的字符串。

以上就是PHP简单可逆加密解密算法的详细内容,更多关于PHP开发安全的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。