欢迎访问宙启技术站
智能推送

PHP7.1实现的AES与RSA加密操作示例

发布时间:2023-05-14 08:52:09

开发中涉及到加密的场景是非常常见的,比如用户密码存储,数据传输等等。常见的加密算法有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实现加密操作的技巧。在实际开发中,加密是非常重要的一个环节,希望大家在实际开发中能够合理运用加密算法,保护用户数据的安全。