PHP数据加密实战:对称AES与非对称RSA代码详解
在网络通信过程中,攻击者可能伪造请求或拦截返回数据,导致信息泄露或内容被篡改。为保障数据安全,通常采用加密技术对传输内容进行保护。本文梳理了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加解密的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









