当前位置:首页 > PHP

rsa php实现

2026-02-28 05:32:45PHP

RSA 算法简介

RSA 是一种非对称加密算法,广泛应用于数据加密和数字签名。它基于大数分解的数学难题,使用公钥加密、私钥解密。

PHP 实现 RSA 加密解密

PHP 内置了 OpenSSL 扩展,可以方便地实现 RSA 加密解密操作。

生成密钥对

使用 OpenSSL 生成 RSA 密钥对:

rsa php实现

$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);
$publicKey = $publicKey["key"];

加密数据

使用公钥加密数据:

$data = "敏感数据需要加密";
openssl_public_encrypt($data, $encrypted, $publicKey);
$encrypted = base64_encode($encrypted); // 便于传输

解密数据

使用私钥解密数据:

rsa php实现

$encrypted = base64_decode($encrypted);
openssl_private_decrypt($encrypted, $decrypted, $privateKey);
echo $decrypted;

RSA 签名验证

RSA 也可用于数字签名,验证数据完整性。

生成签名

openssl_sign($data, $signature, $privateKey, OPENSSL_ALGO_SHA256);
$signature = base64_encode($signature);

验证签名

$signature = base64_decode($signature);
$valid = openssl_verify($data, $signature, $publicKey, OPENSSL_ALGO_SHA256);
echo $valid === 1 ? "签名有效" : "签名无效";

注意事项

  • 密钥长度建议至少 2048 位,高安全场景使用 4096 位
  • 妥善保管私钥,切勿泄露
  • 加密数据长度受密钥长度限制,长数据需分段处理
  • 生产环境应考虑使用专业的密钥管理系统

性能优化建议

对于大量数据加密,建议:

  • 使用 RSA 加密对称密钥(如 AES 密钥)
  • 用对称加密算法加密实际数据
  • 这种混合加密方式兼顾安全性和性能

标签: rsaphp
分享给朋友:

相关文章

php实现文件下载

php实现文件下载

PHP 实现文件下载的方法 使用 header() 函数强制下载 设置正确的 HTTP 头信息,强制浏览器下载文件而不是直接打开。 $file = 'path/to/file.pdf'; if (f…

php实现搜索功能

php实现搜索功能

实现基本的搜索功能 在PHP中实现搜索功能通常涉及数据库查询。以下是一个简单的实现方式,假设使用MySQL数据库: <?php // 连接数据库 $conn = new mysqli('loc…

php实现表单

php实现表单

PHP 表单基础实现 创建一个简单的 PHP 表单需要 HTML 表单结构和 PHP 处理脚本。以下是一个完整的示例: HTML 表单部分 (form.html) <form action=…

php实现

php实现

PHP 实现的基本方法 PHP 是一种服务器端脚本语言,广泛用于 Web 开发。以下是 PHP 实现的一些常见方法。 变量与数据类型 PHP 变量以 $ 开头,支持多种数据类型: $nam…

php 实现接口

php 实现接口

PHP 实现接口的方法 在 PHP 中,接口(Interface)用于定义一组方法的规范,而不包含具体的实现。类可以实现(implement)接口,并必须实现接口中定义的所有方法。 定义接口 接口通…

php实现静态

php实现静态

静态化实现方法 PHP实现静态化主要通过生成HTML文件或缓存机制来减少服务器动态解析的开销。以下是几种常见方法: 生成静态HTML文件 通过file_put_contents()将动态内容保存为H…