PHP7.1实现的AES与RSA加密操作示例
开发中涉及到加密的场景是非常常见的,比如用户密码存储,数据传输等等。常见的加密算法有AES和RSA,其中AES是一种对称加密算法,RSA是一种非对称加密算法。
在PHP7.1中,内置了对AES和RSA加密算法的支持。下面给大家介绍一下如何使用PHP7.1实现AES和RSA加密操作。
一、AES加密算法
AES加密算法是一种对称加密算法,它基于一个密钥来加密数据。在加密数据之前需要确定一个密钥,解密时使用相同的密钥来解密。
1.生成AES密钥
要使用AES加密算法,首先需要生成一个随机密钥,如下所示:
$key = random_bytes(32);
这里使用了PHP7.1中内置的random_bytes函数,生成一个32位的随机密钥。
2.加密数据
生成密钥之后,就可以使用它来加密数据了。具体代码如下:
$data = 'hello,world';
$iv_size = openssl_cipher_iv_length('AES-256-CBC');
$iv = openssl_random_pseudo_bytes($iv_size);
$ciphertext = openssl_encrypt($data, 'AES-256-CBC', $key, OPENSSL_RAW_DATA, $iv);
在上述代码中,使用了openssl_cipher_iv_length函数来获取指定算法下的iv长度,用openssl_random_pseudo_bytes函数生成相同长度的iv,然后使用openssl_encrypt函数对$data进行加密。
其中,openssl_encrypt函数的参数分别为:
- $data:待加密数据
- AES-256-CBC:加密算法
- $key:Aes密钥
- OPENSSL_RAW_DATA:输出原始二进制数据
- $iv:向量
3.解密数据
加密之后的数据,需要解密才能得到原始数据。具体代码如下:
$plaintext = openssl_decrypt($ciphertext, 'AES-256-CBC', $key, OPENSSL_RAW_DATA, $iv);
在上述代码中,使用了openssl_decrypt函数对$ciphertext进行解密,得到原始数据。
二、RSA加密算法
RSA加密算法是一种非对称加密算法,它需要一个公钥和一个私钥。公钥是用于加密数据的,私钥则是用于解密数据的。在PHP7.1中,可以使用openssl扩展提供的函数来进行RSA加密操作。
1.生成RSA密钥
生成RSA密钥需要两个步骤,分别是生成私钥和公钥,并保存在文件中。具体代码如下:
$config = array(
"digest_alg" => "sha512",
"private_key_bits" => 4096,
"private_key_type" => OPENSSL_KEYTYPE_RSA,
);
// 生成私钥
$res = openssl_pkey_new($config);
openssl_pkey_export($res, $private_key);
file_put_contents('private.key', $private_key);
// 生成公钥
$pub_key = openssl_pkey_get_details($res);
$pub_key = $pub_key["key"];
file_put_contents('public.key', $pub_key);
在上述代码中,使用了openssl_pkey_new函数生成一个RSA密钥对,使用openssl_pkey_export函数将私钥导出并保存到文件中,并使用openssl_pkey_get_details函数获取公钥并保存到文件中。
2.加密数据
在使用RSA进行加密数据之前,需要先从文件中加载公钥,具体代码如下:
$public_key = file_get_contents('public.key');
然后就可以使用openssl_public_encrypt函数对数据进行加密了,具体代码如下:
$data = 'hello,world'; $encrypted = ''; openssl_public_encrypt($data, $encrypted, $public_key);
在上述代码中,使用了openssl_public_encrypt函数对$data进行加密,并将结果保存到$encrypted变量中。
3.解密数据
加密之后的数据,需要使用私钥进行解密。在使用RSA进行解密数据之前,需要先从文件中加载私钥,具体代码如下:
$private_key = file_get_contents('private.key');
然后使用openssl_private_decrypt函数就可以解密数据了,具体代码如下:
$decrypted = ''; openssl_private_decrypt($encrypted, $decrypted, $private_key);
在上述代码中,使用了openssl_private_decrypt函数对$encrypted进行解密,并将结果保存到$decrypted变量中。
总结
本文介绍了如何使用PHP7.1实现AES和RSA加密算法。通过本文的介绍,相信大家已经掌握了如何使用PHP7.1实现加密操作的技巧。在实际开发中,加密是非常重要的一个环节,希望大家在实际开发中能够合理运用加密算法,保护用户数据的安全。
