当前位置:首页 > PHP

php 实现openssl加密

2026-02-15 11:58:29PHP

PHP 使用 OpenSSL 加密的方法

对称加密(AES)

对称加密使用相同的密钥进行加密和解密。AES 是常用的对称加密算法。

php 实现openssl加密

// 加密
function encryptAES($data, $key, $iv) {
    $encrypted = openssl_encrypt($data, 'AES-256-CBC', $key, OPENSSL_RAW_DATA, $iv);
    return base64_encode($encrypted);
}

// 解密
function decryptAES($encryptedData, $key, $iv) {
    $decrypted = openssl_decrypt(base64_decode($encryptedData), 'AES-256-CBC', $key, OPENSSL_RAW_DATA, $iv);
    return $decrypted;
}

// 示例
$key = openssl_random_pseudo_bytes(32); // 256-bit key
$iv = openssl_random_pseudo_bytes(16); // 128-bit IV
$data = "Sensitive data";
$encrypted = encryptAES($data, $key, $iv);
$decrypted = decryptAES($encrypted, $key, $iv);

非对称加密(RSA)

非对称加密使用公钥加密、私钥解密,适用于安全传输场景。

php 实现openssl加密

// 生成密钥对
$config = array(
    "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"];

// 加密
function encryptRSA($data, $publicKey) {
    openssl_public_encrypt($data, $encrypted, $publicKey);
    return base64_encode($encrypted);
}

// 解密
function decryptRSA($encryptedData, $privateKey) {
    openssl_private_decrypt(base64_decode($encryptedData), $decrypted, $privateKey);
    return $decrypted;
}

// 示例
$data = "Confidential message";
$encrypted = encryptRSA($data, $publicKey);
$decrypted = decryptRSA($encrypted, $privateKey);

数字签名

用于验证数据完整性和来源真实性。

// 签名
function createSignature($data, $privateKey) {
    openssl_sign($data, $signature, $privateKey, OPENSSL_ALGO_SHA256);
    return base64_encode($signature);
}

// 验证
function verifySignature($data, $signature, $publicKey) {
    $signature = base64_decode($signature);
    return openssl_verify($data, $signature, $publicKey, OPENSSL_ALGO_SHA256);
}

// 示例
$data = "Important contract";
$signature = createSignature($data, $privateKey);
$isValid = verifySignature($data, $signature, $publicKey);

注意事项

  • 密钥管理:对称加密的密钥需安全存储,非对称加密的私钥必须严格保密
  • IV 使用:CBC 模式需每次加密使用唯一 IV,且不需要保密
  • 错误处理:检查 openssl 函数返回值,处理可能的失败情况
  • 算法选择:优先使用 AES-256 和 RSA-2048 以上强度

性能建议

  • 大数据量使用对称加密,RSA 仅用于加密密钥或小数据
  • 考虑使用 OpenSSL 的 EVP 系列函数进行更灵活的操作
  • 敏感操作建议结合 HMAC 进行完整性验证

标签: phpopenssl
分享给朋友:

相关文章

php实现图片上传

php实现图片上传

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

php 实现排序

php 实现排序

PHP 实现数组排序的方法 PHP 提供了多种内置函数和方法来实现数组排序,适用于不同的排序需求。以下是一些常见的排序实现方式: 使用 sort() 函数对数组进行升序排序 sort() 函数对数组…

php实现的进度条

php实现的进度条

PHP 实现的进度条方法 在 PHP 中实现进度条通常可以通过命令行脚本(CLI)或 Web 页面两种方式完成。以下是几种常见的实现方法: 命令行进度条 使用 PHP CLI 实现进度条,可以通过不…

php mvc实现

php mvc实现

PHP MVC 实现步骤 模型(Model)层 模型负责数据处理和业务逻辑,通常与数据库交互。创建一个基类模型,其他具体模型继承它。 class Model { protected $db;…

php 实现无限分类

php 实现无限分类

无限分类的实现方法 无限分类通常用于构建多层级结构的数据,如商品分类、菜单管理等。以下是几种常见的实现方式: 邻接列表模型(Adjacency List) 这是最简单的实现方式,每个分类记录存储其父…

php 伪静态实现

php 伪静态实现

PHP 伪静态实现方法 伪静态(URL Rewrite)是一种通过服务器配置将动态URL转换为静态URL的技术,提升URL的可读性和SEO效果。以下是几种常见的实现方式: 使用Apache的mod_…