PHP基于openssl实现非对称加密代码实例

一、什么是非对称加密?

非对称加密是一种常用的数据加密方式,也叫公钥加密。与对称加密相比,非对称加密需要两把密钥,一把是公钥,一把是私钥。

所谓公钥加密,就是发送方用接收方的公钥进行加密,接收方收到密文后,用自己的私钥进行解密。由于公钥是公开的,因此加密过程并不需要保密,只有私钥具有保密性,因此可以做到数据的安全传输。

二、基于openssl实现非对称加密的代码实例

1. 生成私钥和公钥

在进行非对称加密的实例之前,我们需要先生成一对私钥和公钥。下面是使用openssl生成私钥和公钥的命令:

```

openssl genpkey -algorithm RSA -out private.pem -aes256

openssl rsa -in private.pem -pubout -out public.pem

```

第一条命令用于生成私钥,并将其保存到private.pem文件中。同时,我们使用AES256算法对私钥进行加密,以保证私钥的安全性。

第二条命令用于从私钥中提取出公钥,并将其保存到public.pem文件中。

2. 加密数据

下面是使用openssl进行非对称加密的代码实例:

```

// 读取公钥文件

$publicKey = openssl_pkey_get_public(file_get_contents('public.pem'));

// 待加密的数据

$data = 'Hello, world!';

// 对数据进行加密

openssl_public_encrypt($data, $encrypted, $publicKey);

// 将加密后的数据保存到文件中

file_put_contents('data.bin', $encrypted);

?>

```

在上述代码中,我们先从public.pem文件中读取公钥,然后对数据进行加密,并将加密后的数据保存到data.bin文件中。

3. 解密数据

下面是使用openssl进行非对称解密的代码实例:

```

// 读取私钥文件

$privateKey = openssl_pkey_get_private(file_get_contents('private.pem'), 'password');

// 读取加密后的数据

$encrypted = file_get_contents('data.bin');

// 对数据进行解密

openssl_private_decrypt($encrypted, $decrypted, $privateKey);

// 输出解密后的数据

echo $decrypted;

?>

```

在上述代码中,我们从private.pem文件中读取私钥,并使用指定的密码将其解密。然后,我们从data.bin文件中读出加密后的数据,并对其进行解密。最后,输出解密后的数据。

三、本文总结

本文主要介绍了基于openssl实现非对称加密的代码实例。首先,我们使用openssl生成了一对私钥和公钥。然后,我们使用公钥将数据加密,并将加密后的数据保存到文件中。最后,我们使用私钥将加密后的数据解密,并输出解密后的数据。相信通过本文的介绍,读者已经了解了如何使用openssl进行非对称加密。

后端开发标签