当前位置:首页 > PHP

php实现rsa

2026-02-14 20:08:25PHP

PHP 实现 RSA 加密解密

PHP 提供了内置的 OpenSSL 扩展来实现 RSA 加密和解密功能。以下是完整的实现方法:

生成 RSA 密钥对

$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"];

// 保存密钥到文件(可选)
file_put_contents('private.key', $privateKey);
file_put_contents('public.key', $publicKey);

使用公钥加密数据

$data = "敏感数据需要加密";
openssl_public_encrypt($data, $encrypted, $publicKey);

// 加密后的数据是二进制,可以base64编码便于传输
$encrypted = base64_encode($encrypted);

使用私钥解密数据

// 先解码base64
$encrypted = base64_decode($encrypted);

openssl_private_decrypt($encrypted, $decrypted, $privateKey);

echo $decrypted; // 输出: 敏感数据需要加密

使用私钥签名数据

$data = "需要签名的数据";
openssl_sign($data, $signature, $privateKey, OPENSSL_ALGO_SHA256);

// 签名也是二进制,可以base64编码
$signature = base64_encode($signature);

使用公钥验证签名

$data = "需要签名的数据";
$signature = base64_decode($signature);

$valid = openssl_verify($data, $signature, $publicKey, OPENSSL_ALGO_SHA256);

if ($valid === 1) {
    echo "签名验证成功";
} else {
    echo "签名验证失败";
}

注意事项

  • RSA 加密有长度限制,通常只能加密比密钥长度小的数据(例如4096位密钥最多加密446字节)
  • 对于大数据加密,应该使用对称加密(如AES)加密数据,再用RSA加密对称密钥
  • 密钥长度建议至少2048位,高安全性场景使用4096位
  • 私钥必须严格保密,公钥可以自由分发
  • 生产环境应该使用专业的密钥管理方案

性能优化建议

  • 对于频繁的加密操作,可以缓存密钥而不是每次从文件读取
  • 考虑使用更高效的签名算法如OPENSSL_ALGO_SHA256替代OPENSSL_ALGO_SHA512
  • 大量数据加密时,采用混合加密方案(RSA+AES)性能更好

php实现rsa

标签: phprsa
分享给朋友:

相关文章

php实现打印功能

php实现打印功能

PHP 实现打印功能的方法 PHP 可以通过多种方式实现打印功能,具体取决于打印的目标(如打印机、PDF、网页等)和需求(如直接打印、生成打印预览等)。以下是几种常见的实现方式: 使用 JavaS…

php实现图片上传

php实现图片上传

实现图片上传的基本步骤 创建HTML表单用于文件上传,表单需设置enctype="multipart/form-data"属性,确保文件数据正确传输。 <form action="upload…

php实现队列

php实现队列

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

php购物车实现

php购物车实现

PHP购物车实现方法 使用PHP实现购物车功能可以通过多种方式完成,以下是几种常见的实现方法: Session存储购物车数据 利用PHP的$_SESSION超全局变量存储购物车数据是最简单的方法。…

php实现分类

php实现分类

PHP实现分类的方法 数据库设计 创建分类表时,通常需要包含id、名称、父级id等字段。父级id用于实现多级分类结构。 CREATE TABLE categories ( id INT A…

php实现静态

php实现静态

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