1. 了解RSA加解密算法
RSA是一种非对称加密算法,它使用一对密钥(公钥和私钥)来进行加密和解密操作。公钥用于加密数据,而私钥用于解密数据。RSA算法的安全性基于大素数的因子分解问题,即将一个非常大的整数分解为两个更小的整数是一个计算上不可行的任务。
2. 生成RSA密钥
在PHP中生成RSA密钥对可以使用`openssl`扩展。首先要生成一个私钥,然后从私钥中提取出公钥。
2.1 生成私钥
```
$privateKey = openssl_pkey_new(array(
'private_key_bits' => 1024,
'private_key_type' => OPENSSL_KEYTYPE_RSA,
));
openssl_pkey_export($privateKey, $privateKeyString);
file_put_contents('private.pem', $privateKeyString);
```
上述代码使用`openssl_pkey_new`函数生成了一个1024位的RSA私钥,然后使用`openssl_pkey_export`导出私钥,并将其保存到文件`private.pem`中。
2.2 提取公钥
```
$privateKey = file_get_contents('private.pem');
$res = openssl_pkey_get_private($privateKey);
$publicKey = openssl_pkey_get_details($res)['key'];
file_put_contents('public.pem', $publicKey);
```
上述代码首先通过`file_get_contents`函数从文件中读取私钥内容,然后使用`openssl_pkey_get_private`函数将私钥字符串转换为`openssl`可操作的资源,接着使用`openssl_pkey_get_details`函数从资源中提取出公钥,最后将公钥保存到文件`public.pem`中。
3. RSA加解密操作
3.1 加密数据
```
$publicKey = file_get_contents('public.pem');
$data = 'Hello, RSA!';
openssl_public_encrypt($data, $encrypted, $publicKey);
file_put_contents('encrypted.txt', $encrypted);
```
上述代码使用`openssl_public_encrypt`函数对字符串`Hello, RSA!`进行加密,并将加密结果保存到文件`encrypted.txt`中。
3.2 解密数据
```
$privateKey = file_get_contents('private.pem');
$encrypted = file_get_contents('encrypted.txt');
openssl_private_decrypt($encrypted, $decrypted, $privateKey);
echo $decr