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

PHP的加密和解密函数库:加密算法详解

发布时间:2023-06-10 05:56:03

PHP作为一门通用脚本语言,为了满足安全加密需求,提供了多种加密和解密函数库,以便开发者在对敏感数据进行安全存储和传输时,能够轻松地进行相关操作。

一、加密和解密函数库的基本介绍

1.1 加密库

PHP的加密函数库提供多种加密算法,如AES,DES,RSA等。这些算法都是当前最先进的加密算法,可以有效保护用户数据的安全。

1.2 解密库

解密函数库的作用是对加密数据进行解密,以便用户可以获得原始数据。PHP的解密函数库也提供了多种解密算法,如AES,DES,RSA等。

1.3 使用方法

在使用PHP的加密和解密函数库时,需要引入对应的函数库文件,并调用相应的函数。常见的加密和解密函数如下:

- mcrypt_encrypt():加密函数,使用对称加密算法(如AES、DES等)对数据进行加密。

- mcrypt_decrypt():解密函数,对加密数据进行解密,得到原始数据。

- openssl_encrypt():加密函数,使用非对称加密算法(如RSA)对数据进行加密。

- openssl_decrypt():解密函数,对加密数据进行解密,得到原始数据。

二、PHP的加密算法详解

2.1 对称加密算法

对称加密算法是一种加密方法,在加密和解密过程中,使用相同的密钥进行操作。对称加密算法目前比较常用的有AES和DES两种。

2.1.1 AES加密算法

AES全称为“高级加密标准”(Advanced Encryption Standard),是一种高效、安全、可靠的对称加密算法。它能够有效地保护用户数据的安全,并且使用起来非常简单。

使用mcrypt_encrypt()函数加密数据时,需要传入3个参数:

- 加密的算法:使用“MCRYPT_RIJNDAEL_128”,即使用AES算法进行加密。

- 加密的模式:使用“MCRYPT_MODE_CBC”模式,即使用CBC模式进行加密。

- 密钥:用于加密和解密的密钥,长度为16个字符。

加密代码示例:

$key = 'abcdef1234567890';  //密钥

$src = 'hello world';  //明文数据

$encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $src, MCRYPT_MODE_CBC);

echo base64_encode($encrypted);返

解密代码示例:

$key = 'abcdef1234567890';  //密钥

$encrypted = base64_decode('9gsJYkiCZ9iBLsCnHKjF+Q==');  //加密后的数据

$decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $encrypted, MCRYPT_MODE_CBC);

echo trim($decrypted);,请注意,解密出来的数据可能会包含一些乱码,可以使用trim()函数去掉字符串两边的空格。

2.1.2 DES加密算法

DES全称为“数据加密标准”(Data Encryption Standard),是一种比较常用的对称加密算法。它使用56位密钥进行加密和解密操作。

使用mcrypt_encrypt()函数加密数据时,需要传入3个参数:

- 加密的算法:使用“MCRYPT_DES”,即使用DES算法进行加密。

- 加密的模式:使用“MCRYPT_MODE_ECB”模式,即使用ECB模式进行加密。

- 密钥:用于加密和解密的密钥,长度为8个字符。

加密代码示例:

$key = 'abcdef12';  //密钥

$src = 'hello world';  //明文数据

$encrypted = mcrypt_encrypt(MCRYPT_DES, $key, $src, MCRYPT_MODE_ECB);

echo base64_encode($encrypted);返

解密代码示例:

$key = 'abcdef12';  //密钥

$encrypted = base64_decode('p8S/WQKYAj5pVEm9itKvQg==');  //加密后的数据

$decrypted = mcrypt_decrypt(MCRYPT_DES, $key, $encrypted, MCRYPT_MODE_ECB);

echo trim($decrypted);请注意,解密出来的数据可能会包含一些乱码,可以使用trim()函数去掉字符串两边的空格。

2.2 非对称加密算法

非对称加密算法是一种加密方法,在加密和解密过程中,使用两个密钥进行操作,分别为公钥和私钥。常见的非对称加密算法有RSA和DSA等。

2.2.1 RSA加密算法

RSA全称为“Rivest-Shamir-Adleman”,是一种常用的非对称加密算法。RSA算法基于一个简单的数论事实:将两个质数相乘很容易,但是将一个大数分解成其质数因子则非常困难。RSA算法使用公钥和私钥进行加密和解密,消息发送方使用接收方的公钥对消息进行加密,接收方再使用自己的私钥进行解密,从而保证通信的安全。

使用openssl_encrypt()函数加密数据时,需要传入5个参数:

- 加密的数据:要加密的明文数据。

- 加密的算法:使用“RSA”算法进行加密。

- 加密的公钥:用于加密数据的公钥。

- 加密的模式:使用“OPENSSL_PKCS1_PADDING”模式进行加密。

- 加密的后缀:加密后用于区分的后缀字符串。

加密代码示例:

$public_key = openssl_pkey_get_public(file_get_contents('public.pem'));   //公钥

$src = 'hello world';   //明文数据

openssl_public_encrypt($src, $encrypted, $public_key, OPENSSL_PKCS1_PADDING);   

echo base64_encode($encrypted); //

解密代码示例:

$private_key = openssl_pkey_get_private(file_get_contents('private.pem'));   //私钥

$encrypted = base64_decode('LpQV/m5j83EIc8qvXMI4fYeW+UUddRjH/wKsMytMmQB9AKggB9nHNXtNjpk2xrKaZJtskyDTHJZXfH1EDWWpvRIP2sk3tj7gg87GERdj2Wu3cHhIvvkYGe7CFkGmkFkoFOfJ1W2TJPWOm4gMTK+lYjuabt2WmJLjZVMckw/P4='); //加密后的数据

openssl_private_decrypt($encrypted, $decrypted, $private_key, OPENSSL_PKCS1_PADDING);  

echo $decrypted; 

三、小结

PHP的加密和解密函数库提供了多种加密和解密算法,可以帮助开发者轻松地进行数据的加密和解密操作。在使用加密和解密函数时需要特别注意公私钥的匹配,否则无法进行正确的加密和解密操作。