php实现rsa
PHP 实现 RSA 加密解密
RSA 是一种非对称加密算法,广泛应用于数据加密和数字签名。PHP 提供了 OpenSSL 扩展来支持 RSA 加密解密操作。

生成 RSA 密钥对
使用 OpenSSL 函数生成 RSA 密钥对:

$config = array(
"private_key_bits" => 2048,
"private_key_type" => OPENSSL_KEYTYPE_RSA,
);
$res = openssl_pkey_new($config);
openssl_pkey_export($res, $privateKey);
$publicKey = openssl_pkey_get_details($res)["key"];
echo "Private Key:\n$privateKey\n";
echo "Public Key:\n$publicKey\n";
使用公钥加密数据
$data = "Sensitive data to encrypt";
openssl_public_encrypt($data, $encrypted, $publicKey);
$encryptedBase64 = base64_encode($encrypted);
echo "Encrypted Data (Base64):\n$encryptedBase64\n";
使用私钥解密数据
$encrypted = base64_decode($encryptedBase64);
openssl_private_decrypt($encrypted, $decrypted, $privateKey);
echo "Decrypted Data:\n$decrypted\n";
数字签名和验证
生成签名:
openssl_sign($data, $signature, $privateKey, OPENSSL_ALGO_SHA256);
$signatureBase64 = base64_encode($signature);
echo "Signature (Base64):\n$signatureBase64\n";
验证签名:
$signature = base64_decode($signatureBase64);
$valid = openssl_verify($data, $signature, $publicKey, OPENSSL_ALGO_SHA256);
echo $valid === 1 ? "Signature is valid" : "Signature is invalid";
注意事项
- RSA 加密有长度限制,通常不能超过密钥长度减去填充长度(如 2048 位密钥最多加密 245 字节)
- 对于大数据加密,建议使用 RSA 加密对称密钥,然后用对称密钥加密数据
- 确保私钥安全存储,公钥可以公开分发
- 考虑使用更现代的算法如 ECC 替代 RSA 在某些场景下
以上代码提供了 PHP 中实现 RSA 加密、解密、签名和验证的基本方法。实际应用中应根据具体需求调整密钥长度、填充方案等参数。






