php rsa 实现
RSA 加密实现
在 PHP 中实现 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);
$publicKey = $publicKey["key"];
// 要加密的数据
$data = "Hello, RSA!";
// 使用公钥加密
openssl_public_encrypt($data, $encrypted, $publicKey);
$encrypted = base64_encode($encrypted);
// 使用私钥解密
openssl_private_decrypt(base64_decode($encrypted), $decrypted, $privateKey);
echo "Original: $data\n";
echo "Encrypted: $encrypted\n";
echo "Decrypted: $decrypted\n";
RSA 签名验证
RSA 也可用于数字签名:

// 创建签名
openssl_sign($data, $signature, $privateKey, OPENSSL_ALGO_SHA256);
$signature = base64_encode($signature);
// 验证签名
$valid = openssl_verify($data, base64_decode($signature), $publicKey, OPENSSL_ALGO_SHA256);
echo "Signature: $signature\n";
echo "Verification: " . ($valid ? "Valid" : "Invalid") . "\n";
密钥存储
生成的密钥可以保存到文件中:
// 保存公钥
file_put_contents('public.pem', $publicKey);
// 保存私钥
file_put_contents('private.pem', $privateKey);
// 从文件加载密钥
$publicKey = file_get_contents('public.pem');
$privateKey = file_get_contents('private.pem');
注意事项
- 密钥长度至少应为 2048 位以确保安全性
- 私钥必须严格保密
- 加密数据长度不能超过密钥长度减去填充长度
- 对于大数据,应使用对称加密,仅用 RSA 加密对称密钥






