rsa php实现
RSA 加密算法在 PHP 中的实现
RSA 是一种非对称加密算法,广泛用于数据加密和数字签名。在 PHP 中,可以通过 OpenSSL 扩展实现 RSA 加密和解密。
生成 RSA 密钥对
使用 OpenSSL 函数生成 RSA 公钥和私钥:
$config = array(
"digest_alg" => "sha512",
"private_key_bits" => 4096,
"private_key_type" => OPENSSL_KEYTYPE_RSA,
);
$res = openssl_pkey_new($config);
openssl_pkey_export($res, $privateKey);
$publicKey = openssl_pkey_get_details($res)["key"];
使用公钥加密数据
$data = "Hello, RSA!";
openssl_public_encrypt($data, $encrypted, $publicKey);
$encryptedBase64 = base64_encode($encrypted);
使用私钥解密数据
$encrypted = base64_decode($encryptedBase64);
openssl_private_decrypt($encrypted, $decrypted, $privateKey);
echo $decrypted; // 输出: Hello, RSA!
使用私钥签名数据
openssl_sign($data, $signature, $privateKey, OPENSSL_ALGO_SHA256);
$signatureBase64 = base64_encode($signature);
使用公钥验证签名
$signature = base64_decode($signatureBase64);
$valid = openssl_verify($data, $signature, $publicKey, OPENSSL_ALGO_SHA256);
echo $valid === 1 ? "签名有效" : "签名无效";
注意事项
- 密钥长度建议至少 2048 位,更高安全性可使用 4096 位
- 实际应用中私钥应妥善保管,不应硬编码在代码中
- 对于大量数据加密,建议使用对称加密算法如 AES,RSA 仅用于加密对称密钥
完整示例代码
// 生成密钥对
$config = array(
"digest_alg" => "sha512",
"private_key_bits" => 4096,
"private_key_type" => OPENSSL_KEYTYPE_RSA,
);
$res = openssl_pkey_new($config);
openssl_pkey_export($res, $privateKey);
$publicKey = openssl_pkey_get_details($res)["key"];
// 加密示例
$data = "Hello, RSA!";
openssl_public_encrypt($data, $encrypted, $publicKey);
$encryptedBase64 = base64_encode($encrypted);
// 解密示例
$encrypted = base64_decode($encryptedBase64);
openssl_private_decrypt($encrypted, $decrypted, $privateKey);
echo $decrypted;
// 签名示例
openssl_sign($data, $signature, $privateKey, OPENSSL_ALGO_SHA256);
$signatureBase64 = base64_encode($signature);
// 验证签名示例
$signature = base64_decode($signatureBase64);
$valid = openssl_verify($data, $signature, $publicKey, OPENSSL_ALGO_SHA256);
echo $valid === 1 ? "签名有效" : "签名无效";
以上代码展示了 PHP 中 RSA 加密的基本实现方法,可根据实际需求进行调整和扩展。







