当前位置:首页 > PHP

rsa php实现

2026-02-14 06:29:36PHP

RSA 加密算法在 PHP 中的实现

RSA 是一种非对称加密算法,广泛应用于数据加密和数字签名。以下是 PHP 中实现 RSA 加密和解密的方法。

生成 RSA 密钥对

使用 openssl_pkey_new 函数生成 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)["key"];

private_key_bits 指定密钥长度,通常为 2048 或 4096 位。

加密数据

使用公钥加密数据:

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

加密后的数据是二进制格式,通常需要 Base64 编码以便传输。

解密数据

使用私钥解密数据:

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

签名和验证

RSA 也可用于数字签名:

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

$verified = openssl_verify($data, base64_decode($signatureBase64), $publicKey, OPENSSL_ALGO_SHA256);

密钥存储

生成的密钥可以保存到文件中:

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

使用时从文件读取:

rsa php实现

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

注意事项

密钥长度至少应为 2048 位以保证安全性。 加密的数据长度不能超过密钥长度减去填充长度(例如 2048 位密钥最多加密 245 字节)。 敏感数据应使用 HTTPS 等安全通道传输。 私钥必须严格保密,公钥可以自由分发。

标签: rsaphp
分享给朋友:

相关文章

php实现文件上传

php实现文件上传

PHP 文件上传实现方法 在 PHP 中实现文件上传需要处理 HTML 表单和服务器端脚本。以下是详细步骤: 创建 HTML 表单 使用 enctype="multipart/form-data"…

git php实现

git php实现

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

php实现增删改查

php实现增删改查

以下是在PHP中实现增删改查(CRUD)操作的详细方法,以MySQL数据库为例: 数据库连接配置 创建config.php文件存储数据库连接信息: <?php $host = 'localh…

php实现排序

php实现排序

PHP 数组排序方法 PHP 提供了多种内置函数用于数组排序,适用于不同的排序需求。以下是常见的排序方法: 按值升序排序 sort() 函数对数组按值升序排序,重置键名(索引数组适用): $num…

php 实现秒杀

php 实现秒杀

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

php登陆功能实现

php登陆功能实现

实现PHP登录功能 数据库准备 创建一个用户表存储登录信息,基本字段包括用户名、密码(需加密)等: CREATE TABLE users ( id INT AUTO_INCREMENT PR…