php rsa 实现
RSA 加密原理
RSA 是一种非对称加密算法,基于大整数分解的数学难题。公钥用于加密,私钥用于解密。密钥生成过程涉及选择两个大素数、计算模数和欧拉函数,最终确定公钥指数和私钥指数。
生成 RSA 密钥对
使用 OpenSSL 扩展生成密钥对:
$config = [
"private_key_bits" => 2048,
"private_key_type" => OPENSSL_KEYTYPE_RSA,
];
$keyPair = openssl_pkey_new($config);
openssl_pkey_export($keyPair, $privateKey);
$publicKey = openssl_pkey_get_details($keyPair)["key"];
加密数据
使用公钥加密字符串:
$data = "敏感信息";
openssl_public_encrypt($data, $encrypted, $publicKey);
$encryptedBase64 = base64_encode($encrypted); // 便于传输
解密数据
使用私钥解密数据:
openssl_private_decrypt(
base64_decode($encryptedBase64),
$decrypted,
$privateKey
);
echo $decrypted; // 输出原始数据
签名与验证
生成数字签名:
openssl_sign($data, $signature, $privateKey, OPENSSL_ALGO_SHA256);
$signatureBase64 = base64_encode($signature);
验证签名有效性:
$isValid = openssl_verify(
$data,
base64_decode($signatureBase64),
$publicKey,
OPENSSL_ALGO_SHA256
);
密钥存储建议
- 私钥应保存在安全位置,如加密的服务器存储
- 公钥可分发到客户端或公开
- 考虑使用文件或数据库存储密钥,并设置适当权限
性能注意事项
- RSA 加密较慢,适合加密少量数据(如对称密钥)
- 大数据加密建议结合 AES 等对称算法
- 密钥长度影响安全性,2048 位是当前推荐的最小长度
以上实现使用 PHP 内置的 OpenSSL 函数,确保服务器已安装该扩展。实际应用中应增加错误处理和日志记录机制。







