当前位置:首页 > 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 实现接口的方法 在 PHP 中,接口(Interface)用于定义一组方法的规范,而不包含具体的实现。类可以实现(implement)接口,并必须实现接口中定义的所有方法。 定义接口 接口通…

php 实现秒杀

php 实现秒杀

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

php实现一个

php实现一个

PHP 实现一个简单的计算器 创建一个基本的计算器,支持加、减、乘、除运算。以下是一个完整的实现代码示例: <?php $result = ""; if ($_SERVER["REQUEST_…

php 实现单点登录

php 实现单点登录

PHP 实现单点登录的方法 单点登录(SSO)允许用户通过一次登录访问多个相互信任的系统。以下是基于 PHP 的实现方案: 基于共享 Session 的方案 在同一个主域名下的子域名间可以通过共享…

php实现定时

php实现定时

PHP 实现定时任务的方法 PHP 本身是脚本语言,通常需要借助外部工具或框架实现定时任务。以下是几种常见方法: 使用 Cron 任务 Linux 系统自带的 Cron 是常用的定时任务工具。通过编…

php实现注册登录

php实现注册登录

PHP 注册功能实现 创建数据库表(以 MySQL 为例) CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, user…