一、什么是非对称加密?
非对称加密是一种常用的数据加密方式,也叫公钥加密。与对称加密相比,非对称加密需要两把密钥,一把是公钥,一把是私钥。
所谓公钥加密,就是发送方用接收方的公钥进行加密,接收方收到密文后,用自己的私钥进行解密。由于公钥是公开的,因此加密过程并不需要保密,只有私钥具有保密性,因此可以做到数据的安全传输。
二、基于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进行非对称加密。