news 2026/6/8 19:50:36

PHP加密解密与密码安全实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
PHP加密解密与密码安全实践

PHP加密解密与密码安全实践

加密是保障数据安全的核心技术。PHP提供了多种加密工具,从密码哈希到对称加密、非对称加密都有。今天说说PHP中各种加密算法的使用。

密码存储是基础中的基础。PHP提供了password_hash和password_verify。

```php
$password = 'MySecurePassword123!';
$hash = password_hash($password, PASSWORD_BCRYPT, ['cost' => 12]);
echo "哈希: $hash\n";

if (password_verify($password, $hash)) {
echo "密码验证成功\n";
}

if (password_needs_rehash($hash, PASSWORD_ARGON2ID)) {
$newHash = password_hash($password, PASSWORD_ARGON2ID);
echo "已升级到Argon2ID\n";
}
?>
```

对称加密用openssl扩展。AES-256-GCM是推荐算法。

```php
function encrypt(string $plaintext, string $key): string
{
$iv = random_bytes(12);
$tag = '';
$ciphertext = openssl_encrypt($plaintext, 'aes-256-gcm', $key, OPENSSL_RAW_DATA, $iv, $tag);
return base64_encode($iv . $tag . $ciphertext);
}

function decrypt(string $data, string $key): string
{
$decoded = base64_decode($data);
$iv = substr($decoded, 0, 12);
$tag = substr($decoded, 12, 16);
$ciphertext = substr($decoded, 28);
return openssl_decrypt($ciphertext, 'aes-256-gcm', $key, OPENSSL_RAW_DATA, $iv, $tag);
}

$key = random_bytes(32);
$secret = "机密消息";
$encrypted = encrypt($secret, $key);
echo "加密: $encrypted\n";

$decrypted = decrypt($encrypted, $key);
echo "解密: $decrypted\n";
?>
```

非对称加密用公钥加密私钥解密。

```php
class RSAEncryption
{
private string $privateKey;
private string $publicKey;

public function __construct()
{
$resource = openssl_pkey_new(['private_key_bits' => 2048]);
openssl_pkey_export($resource, $this->privateKey);
$details = openssl_pkey_get_details($resource);
$this->publicKey = $details['key'];
}

public function encrypt(string $data): string
{
$encrypted = '';
openssl_public_encrypt($data, $encrypted, $this->publicKey);
return base64_encode($encrypted);
}

public function decrypt(string $data): string
{
$decrypted = '';
openssl_private_decrypt(base64_decode($data), $decrypted, $this->privateKey);
return $decrypted;
}

public function sign(string $data): string
{
$signature = '';
openssl_sign($data, $signature, $this->privateKey);
return base64_encode($signature);
}

public function verify(string $data, string $signature): bool
{
return openssl_verify($data, base64_decode($signature), $this->publicKey) === 1;
}
}

$rsa = new RSAEncryption();
$message = "重要消息";

$encrypted = $rsa->encrypt($message);
echo "RSA加密: $encrypted\n";

$decrypted = $rsa->decrypt($encrypted);
echo "RSA解密: $decrypted\n";

$signature = $rsa->sign($message);
echo "签名验证: " . ($rsa->verify($message, $signature) ? '通过' : '不通过') . "\n";
?>
```

数据签名用于验证完整性和来源。

```php
function signData(array $data, string $secret): string
{
ksort($data);
return hash_hmac('sha256', json_encode($data), $secret);
}

function verifySignature(array $data, string $signature, string $secret): bool
{
return hash_equals(signData($data, $secret), $signature);
}

$secret = 'api-secret-key';
$data = ['user_id' => 123, 'amount' => 99.99, 'timestamp' => time()];
$sig = signData($data, $secret);

echo "数据签名: $sig\n";
echo "验证: " . (verifySignature($data, $sig, $secret) ? '通过' : '不通过') . "\n";

$tampered = $data;
$tampered['amount'] = 9999.99;
echo "篡改验证: " . (verifySignature($tampered, $sig, $secret) ? '通过' : '不通过') . "\n";
?>
```

加密算法的选择根据场景来定。密码存储用password_hash,数据传输用TLS,数据加密用AES-256-GCM,数字签名用RSA。密钥管理比加密算法本身更重要,建议使用专业的密钥管理服务。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/8 19:50:36

2026年透明底图制作方法详细教程:手机电脑一看就会

想给电商产品换个背景却总是扣不干净?证件照背景需要更换,抠图软件用起来却特别复杂?头像周围有黑边或者毛躁的边界线?其实透明底图制作没有你想象的那么难。这篇文章我会从易到难,用4种实用方法教你怎么快速制作透明背…

作者头像 李华
网站建设 2026/6/8 19:49:10

嵌入式LCD驱动设计:从AN1287应用笔记看二进制转ASCII与分层架构

1. 项目概述与核心价值在嵌入式开发的早期阶段,尤其是面对那些资源极其有限的8位或16位微控制器时,每一个字节的RAM和每一微秒的CPU周期都显得弥足珍贵。我记得十多年前刚接触Freescale(现NXP)的HC08、HC12系列MCU时,为…

作者头像 李华
网站建设 2026/6/8 19:40:00

电赛AC-DC项目避坑指南:从功率分析仪选型到并网失败的5个常见问题

电赛AC-DC项目实战避坑手册:从功率分析仪选型到炸管防护的深度解析在电力电子竞赛和工业级电源开发中,三相AC-DC变换系统堪称"魔鬼训练场"。去年带队参加电赛时,我们组在最后48小时经历了功率因数突然跌落、MOS管连环爆炸、输出电压…

作者头像 李华
网站建设 2026/6/8 19:40:00

ASB200传感器开发控制器:嵌入式测量系统的经典硬件设计与校准实践

1. 项目概述与核心价值如果你正在为一个压力或温度测量项目寻找一个“开箱即用”的硬件开发平台,或者你厌倦了从零开始搭建信号调理电路、调试ADC、编写显示驱动和校准算法的繁琐过程,那么Motorola(现NXP)的ASB200传感器开发控制器…

作者头像 李华