当前位置:首页 > PHP

php rsa 实现

2026-01-16 10:55:12PHP

PHP RSA 加密与解密实现

生成密钥对

使用 openssl_pkey_new 生成 RSA 密钥对,并通过 openssl_pkey_export 导出私钥。公钥可从密钥对中提取。

$config = [
    "digest_alg" => "sha512",
    "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"];

加密数据

使用公钥加密数据,openssl_public_encrypt 函数将明文加密为二进制密文,通常需要 Base64 编码以便传输。

$plaintext = "Sensitive data";
openssl_public_encrypt($plaintext, $encrypted, $publicKey);
$encryptedBase64 = base64_encode($encrypted);

解密数据

使用私钥解密数据,先对 Base64 密文解码,再通过 openssl_private_decrypt 还原明文。

$encryptedData = base64_decode($encryptedBase64);
openssl_private_decrypt($encryptedData, $decrypted, $privateKey);
echo $decrypted; // 输出: Sensitive data

签名与验证

用私钥生成签名,公钥验证签名完整性。

openssl_sign($plaintext, $signature, $privateKey, OPENSSL_ALGO_SHA256);
$isValid = openssl_verify($plaintext, $signature, $publicKey, OPENSSL_ALGO_SHA256);
echo $isValid === 1 ? "Valid" : "Invalid";

密钥存储

生成的密钥可保存为文件:

file_put_contents('private.pem', $privateKey);
file_put_contents('public.pem', $publicKey);

加载现有密钥:

$privateKey = openssl_pkey_get_private(file_get_contents('private.pem'));
$publicKey = openssl_pkey_get_public(file_get_contents('public.pem'));

注意事项

  • 密钥长度建议至少 2048 位以保证安全。
  • 加密数据长度受密钥长度限制,长数据需分段处理或使用混合加密(如 AES+RSA)。
  • 敏感操作需处理 openssl_error_string() 返回的错误信息。
  • 生产环境建议使用专业库如 phpseclib 进行更复杂的操作。

php rsa 实现

标签: phprsa
分享给朋友:

相关文章

php实现树

php实现树

PHP实现树结构的方法 在PHP中实现树结构通常可以通过递归或迭代的方式完成。以下是几种常见的实现方法: 递归实现树结构 递归是处理树结构的自然方式,尤其适用于具有未知深度的树。 class…

php实现递归

php实现递归

递归的基本概念 递归是一种函数调用自身的技术,适用于解决可以分解为相同子问题的问题。在PHP中,递归需要明确的终止条件(基线条件),否则会导致无限循环。 递归实现阶乘 阶乘是经典的递归案例,n!…

git php实现

git php实现

Git 与 PHP 的集成实现 使用 PHP 执行 Git 命令 通过 PHP 的 exec()、shell_exec() 或 passthru() 函数可以直接调用 Git 命令,适用于服务器端操作…

php实现websocket

php实现websocket

PHP 实现 WebSocket WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。PHP 可以通过多种方式实现 WebSocket 功能,以下是几种常见的方法: 使用 Rat…

php实现队列

php实现队列

PHP实现队列的方法 队列是一种先进先出(FIFO)的数据结构,PHP可以通过多种方式实现队列功能。 使用数组模拟队列 PHP数组可以模拟队列的基本操作,通过array_push和array_sh…

php验证码实现

php验证码实现

验证码实现方法 在PHP中实现验证码功能通常涉及生成随机字符串或数字,将其转换为图像,并通过会话(Session)进行验证。以下是几种常见的实现方式: 使用GD库生成图像验证码 GD库是PHP内置…