PHP数据加密实战:对称AES与非对称RSA代码详解

Leo
Leo
发布时间:2026-10-15 | 6人浏览过
原创

在网络通信过程中,攻击者可能伪造请求或拦截返回数据,导致信息泄露或内容被篡改。为保障数据安全,通常采用加密技术对传输内容进行保护。本文梳理了PHP中常用的对称加密算法DES、AES以及非对称加密算法RSA的实现原理与代码实践。

对称加密AES

对称加密使用同一个密钥进行加密和解密。早期标准DES已被暴力破解,不再建议使用。目前业界广泛采用AES(高级加密标准),该算法至今未被破解,具有较高的安全性。

在PHP中使用AES加密需要依赖openssl扩展。以下是基于AES-128-CBC模式的加密解密完整示例:

// 获取系统支持的加密算法列表
$a = openssl_get_cipher_methods();
print_r($a);

// 待处理参数设置
$data = 'wo shi aes jiami shuju'; // 待加密的明文数据
$key = uniqid();                 // 随机生成加密密钥
$method = 'AES-128-CBC';         // 指定加密算法模式
$iv = '1234567812345678';        // 初始化向量,CBC模式必须为16位字符

// 执行加密操作,返回二进制原始数据
$a = openssl_encrypt($data, $method, $key, OPENSSL_RAW_DATA, $iv);

// 查看加密结果
print_r($a);

// 执行解密操作,还原原始数据
d = openssl_decrypt($a, $method, $key, OPENSSL_RAW_DATA, $iv);

// 打印解密后的数据
print_r($d);

非对称加密RSA

对称加密存在密钥配送难题:若将密钥直接写在前端代码中,极易被反编译获取。非对称加密使用一对密钥——公钥(公开)和私钥(保密),解决了密钥分发安全问题。但RSA运算消耗较大,仅适合加密短文本(最长不超过128字节)。

第1步:配置公私钥资源

首先准备PEM格式的公钥和私钥字符串。公钥用于前端加密或后端验签,私钥由服务端妥善保管用于解密。

$public_key = "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA...省略内容...
-----END PUBLIC KEY-----";
$private_key = "-----BEGIN PRIVATE KEY-----\nMIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQD...省略内容...
-----END PRIVATE KEY-----";

第2步:实现公钥加密、私钥解密

这是最常见的场景:前端使用公钥加密敏感数据,后端使用私钥解密。

$text = '我是待加密的内容';

// 公钥加密,成功则 $encrypt 存放密文
$res = openssl_public_encrypt($text, $encrypt, $public_key);
if ($res == false) {
    echo '加密失败';
}

// 私钥解密,还原为明文
$res = openssl_private_decrypt($encrypt, $decrypt, $private_key);
if ($res == false) {
    echo '解密失败';
}
echo '解密后的明文数据:' . $decrypt;

第3步:实现私钥签名、公钥验签(可选)

若需证明数据来源完整性,可使用私钥加密生成签名,再用公钥解密验证:

$text = "我是待加密的内容";

// 私钥加密(相当于签名)
$res = openssl_private_encrypt($text, $encrypt, $private_key);
if ($res == false) echo '加密失败';

// 公钥解密(相当于验签)
$res = openssl_public_decrypt($encrypt, $decrypt, $public_key);
if ($res == false) echo '解密失败';
echo '解密后的明文数据:' . $decrypt;

传输编码与注意事项

在实际前后端交互中,加密后的二进制数据不能直接通过URL或表单传输。通常需要进行二次编码:

  • Base64编码:服务器接收到数据后需先进行Base64解析,再进行公钥/私钥解密;同样,后端返回前端时也应转为Base64格式。
  • URL编码:部分场景也可使用urlencode处理特殊字符,具体视协议需求而定。

以上就是PHP数据加密方式梳理介绍的详细内容,更多关于PHP加解密的资料请关注本站其它相关文章!

本站声明

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

Python 相关产品和应用

全部下载

专题列表