📜  openssl 使用密钥加密 php - PHP (1)

📅  最后修改于: 2023-12-03 15:03:23.150000             🧑  作者: Mango

OpenSSL 使用密钥加密 PHP

简介

OpenSSL 是一个非常强大的加密库,它提供了许多加密算法和工具,包括 RSA、DES、AES 等等。同时,它也可以用来创建和管理数字证书。

在 PHP 中,我们可以使用 OpenSSL 函数来实现加密和解密。

本文将介绍如何使用 OpenSSL 函数使用密钥加密 PHP。

准备工作

在开始使用 OpenSSL 函数之前,我们需要确保我们已经安装了 OpenSSL 扩展。可以通过运行以下命令来检查:

php -m | grep openssl

如果输出了 openssl,则表示已经安装了 OpenSSL 扩展。

接下来,我们需要生成一个密钥对,用于加密和解密。我们可以使用以下命令来生成一个私钥和一个公钥:

openssl genpkey -algorithm RSA -out private.pem -aes256
openssl rsa -in private.pem -outform PEM -pubout -out public.pem

其中,private.pem 是私钥文件名称,public.pem 是公钥文件名称。

在生成私钥时,我们使用了 -aes256 参数来指定加密算法为 AES-256。这意味着,我们需要在使用私钥时输入密码才能解密。

加密数据

使用 OpenSSL 函数加密数据需要以下步骤:

  1. 读取公钥文件;
  2. 将需要加密的数据使用公钥加密;
  3. 返回加密后的数据。
<?php

$plaintext = 'This is a secret message to be encrypted.';

// 读取公钥
$public_key = file_get_contents('public.pem');

// 加密数据
if (openssl_public_encrypt($plaintext, $encrypted, $public_key)) {
    echo base64_encode($encrypted);
} else {
    die('加密失败。');
}

?>

在上面的例子中,我们首先读取了公钥文件 public.pem,然后使用 openssl_public_encrypt 函数加密了 $plaintext 变量的内容,并将加密后的结果存储在 $encrypted 变量中。

加密完成后,我们将加密后的数据使用 base64_encode 函数转换为可读的字符串,并输出到屏幕上。如果加密失败,则输出 加密失败。

解密数据

使用 OpenSSL 函数解密数据需要以下步骤:

  1. 读取私钥文件;
  2. 输入密码解密私钥;
  3. 使用私钥解密加密后的数据;
  4. 返回解密后的数据。
<?php

$encrypted = base64_decode('...');
$password = 'my_password';

// 读取私钥
$private_key = openssl_pkey_get_private(file_get_contents('private.pem'), $password);

// 解密数据
if (openssl_private_decrypt($encrypted, $decrypted, $private_key)) {
    echo $decrypted;
} else {
    die('解密失败。');
}

?>

在上面的例子中,我们首先读取了加密后的数据(这里使用了 base64_decode 将之前加密后的数据解密为原始二进制数据),然后输入密码解密私钥。

然后,我们使用私钥解密加密后的数据,并将解密后的结果存储在 $decrypted 变量中。

解密完成后,我们将解密后的数据输出到屏幕上。如果解密失败,则输出 解密失败。

总结

本文介绍了如何使用 OpenSSL 函数使用密钥加密 PHP。我们首先生成了一个密钥对,并用公钥加密数据,然后用私钥解密数据。实际使用中,我们需要注意保护私钥文件,以免泄露密钥给攻击者。