当前位置:首页 > 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);

加载现有密钥:

php rsa 实现

$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 进行更复杂的操作。

标签: phprsa
分享给朋友:

相关文章

php实现搜索

php实现搜索

PHP实现搜索功能的方法 在PHP中实现搜索功能通常涉及数据库查询和用户输入的匹配。以下是几种常见的实现方式: 使用MySQL LIKE语句 通过简单的LIKE语句实现基础搜索: $searchT…

php 实现秒杀

php 实现秒杀

PHP 实现秒杀的关键技术 秒杀系统需要解决高并发、超卖、性能瓶颈等问题。以下是实现秒杀的核心方案: 使用 Redis 预减库存 将商品库存提前加载到 Redis 中,通过原子操作保证库存准确性:…

php搜索功能的实现

php搜索功能的实现

实现PHP搜索功能的方法 数据库搜索 使用SQL的LIKE语句进行模糊匹配,适用于简单的搜索需求。 $searchTerm = $_GET['search']; $query = "SELECT *…

php实现登录功能

php实现登录功能

创建登录表单 在HTML中创建一个表单,包含用户名和密码输入框。表单的action属性指向处理登录的PHP文件,method设置为POST。 <form action="login.php"…

php评论功能实现

php评论功能实现

数据库设计 创建一个评论表存储评论数据,表结构可包含以下字段: id:自增主键 content:评论内容(TEXT类型) user_id:关联用户表的ID article_id:关联文章表的ID c…

php实现无限级分类

php实现无限级分类

无限级分类的实现方法 无限级分类通常用于构建树形结构数据,如商品分类、地区选择等。以下是几种常见的实现方式: 递归实现法 递归是最直观的实现方式,通过函数自身调用来处理子分类: function…