当前位置:首页 > PHP

php 实现openssl加密

2026-02-15 11:58:29PHP

PHP 使用 OpenSSL 加密的方法

对称加密(AES)

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

// 加密
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)

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

// 生成密钥对
$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 进行完整性验证

php 实现openssl加密

标签: phpopenssl
分享给朋友:

相关文章

php实现购物车

php实现购物车

PHP实现购物车功能 购物车功能是电商网站的核心模块之一,通常涉及商品添加、删除、数量修改和结算等操作。以下是使用PHP实现购物车功能的几种方法。 使用Session存储购物车数据 Session是…

php如何实现直播

php如何实现直播

实现直播功能的方法 PHP可以通过结合其他技术和工具来实现直播功能。以下是几种常见的方法: 使用流媒体服务器 配置流媒体服务器如Nginx-RTMP、Red5或Wowza。这些服务器支持RTM…

php实现上传

php实现上传

PHP 文件上传实现 HTML 表单设置 创建一个包含文件上传字段的 HTML 表单,确保表单的 enctype 属性设置为 multipart/form-data,这是文件上传必需的设置。 &l…

基于php的设计与实现

基于php的设计与实现

PHP 设计与实现的关键要素 环境搭建与框架选择 PHP开发需配置服务器环境(如Apache/Nginx)、PHP版本(建议7.4+)及数据库(MySQL/MariaDB)。主流框架包括Laravel…

php实现跳转

php实现跳转

PHP 实现页面跳转的方法 在 PHP 中实现页面跳转有多种方式,以下是常见的几种方法及其适用场景: 使用 header() 函数 通过 header() 函数发送 HTTP 头部信息实现跳转。注意…

php实现分类

php实现分类

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