PHP openssl和mcrypt扩展的区别

发布时间:2019-05-21 11:09:15编辑:丝画阁阅读(259)

1、检查服务器是否已安装了openssl组件,没有则先安装好

openssl version [-a]

 

2、对称加密

查询openssl支持的对称加密算法

openssl_get_cipher_methods();

加密:openssl_encrypt($data, $method, $passwd, $options, $iv);

参数说明:

$data: 加密明文

$method: 加密方法

$passwd: 加密密钥

$options: 数据格式选项(可选)

$iv: 加密初始化向量(可选)

解密:openssl_decrypt($data, $method, $passwd, $options, $iv);

参数说明:

$data: 解密密文

$method: 解密加密方法

$passwd: 解密密钥

$options: 数据格式选项(可选)

$iv: 解密初始化向量(可选)

 

3、生成公钥、私钥对

(1)生成原始RSA私钥文件rsa_private_key.pem

     openssl genrsa -out rsa_private_key.pem 1024

(2)将原始的RSA私钥转换为pkcs8模式

  openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt -out private_key.pem

(3)生成RSA公钥 rsa_public_key.pem

openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem

 

4、使用私钥加密、公钥解密

   使用的私钥为上述生成的rsa_private_key.pem文件内容

   使用的公钥为上述生成的rsa_public_key.pem文件内容

复制代码
 1 // 生成密钥资源id  2 $pi_key = openssl_pkey_get_private($private_key);  3 $pu_key = openssl_pkey_get_public($public_key);  4  5 // 私钥加密  6 $encrypted = ‘’;  7 openssl_private_encrypt($data, $encrypted, $pi_key);  8  9 // 转码,这里的$encrypted就是私钥加密的字符串 10 $encrypted = base64_encode($encrypted); 11 12 // 公钥解密,$decrypted即为公钥解密后私钥加密前的明文 13 $decrypted = ‘’; 14 $encrypted = base64_decode($encrypted); 15 openssl_public_decrypt($encrypted, $decrypted, $pu_key);
复制代码

 

5、使用公钥加密、私钥解密

   使用的私钥为上述生成的rsa_private_key.pem文件内容

   使用的公钥为上述生成的rsa_public_key.pem文件内容

复制代码
 1 // 生成密钥资源id  2 $pi_key = openssl_pkey_get_private($private_key);  3 $pu_key = openssl_pkey_get_public($public_key);  4  5 // 公钥加密  6 $encrypted = ‘’;  7 openssl_public_encrypt($data, $encrypted, $pu_key);  8  9 // 转码,这里的$encrypted就是公钥加密的字符串 10 $encrypted = base64_encode($encrypted); 11 12 // 私钥解密,$decrypted即为私钥解密后公钥加密前的明文 13 $decrypted = ‘’; 14 $encrypted = base64_decode($encrypted); 15 openssl_private_decrypt($encrypted, $decrypted, $pu_key);
复制代码

完整代码演示:

复制代码
 1 php  2 /**  3  * Created by PhpStorm.  4  * User: ahao  5  * Date: 2016/11/20  6  * Time: 10:12  7 */  8 // 列出openssl加密扩展支持的对称加密方法  9 /*$methods = openssl_get_cipher_methods(); 10 echo "
";
11 var_dump($methods); 12 13 $iv = substr(md5('test'),0,8); 14 $encrypt_data = openssl_encrypt('codeman is a good man','des-cbc','passwd',OPENSSL_RAW_DATA,$iv); 15 $encrypt_data = openssl_encrypt('codeman is a good man','des-cbc','passwd',OPENSSL_RAW_DATA); 16 echo $encrypt_data; 17 echo "
";
18 19 $decrypt_data = openssl_decrypt($encrypt_data,'des-cbc','passwd',OPENSSL_RAW_DATA,$iv); 20 echo $decrypt_data;*/ 21 22 // 私钥 23 $private_key = '-----BEGIN RSA PRIVATE KEY----- 24 MIICXAIBAAKBgQDS6VbgEpOwVc8jXYx/uL6ItMS6aBPVo8fvw0pd90jLJYvfJcFJ 25 dYVFh6JPRdpGhlIrED45VdsktcJvJj0cLNI5ZIZ680aS6JTFe3ScBY4Mi7bLKzBN 26 YtMBtnkAFbMmWlCXV4qzZYg8+xNktY5ClZZCvZzzlaU5djtUSoxTLkxcmwIDAQAB 27 AoGAZT944gZo+bynvH17JhEk/nFxA19VLjj6kSH6AFPmkQcMN2pjeIU/Hhq3k0Cg 28 QTzYEy4wAMwzcFME7OC5c14c6GsnOQVEbzT3jA5lNuMnrvb+ehyE0w/O7ah8sSLQ 29 3B42GFKkaKiuY2ufsVC4pv6LMn5Sh26ApW332yO0dXZXagECQQDvAWV+n41R9pUp 30 iB0+ycBvkuE6yjlohc2MqAxdD+EYNgO4jb1F21pZcqasd/SbpiQwVUKk/uxlOvl9 31 3dBlcOWbAkEA4eiMv8UiGwBxjBGrz+I/tBq56gcnjvlOkJFyAyxbKaA1C9C51eVv 32 39OftI9DqCzcuAYZsCmspb6XEPBIB01VAQJAZVyAQM1Fz+b1p6F0VbaWiDsQjjBJ 33 XIyyed6jL6yWWABAX7qs9L1sedbn3OkashAp9N2T4AnFE8GJIdo6kWrp1QJAGOiF 34 LFfWDNgdrO393av6jicsPIuRZwhCC1qeEY+AdbR+ZNEczGLB1RIGV+g7830O0ROL 35 HYtax+Od0HZN2tBCAQJBANIg+HO5+Qy5hgRO3+uRHERgUQxqHzheLdo5GnoQ/sfT 36 sex4mxgze6oq+HldvNWzVjBu9g9417T5WMgyWQ8Unhw= 37 -----END RSA PRIVATE KEY-----'; 38 39 // 公钥 40 $public_key = '-----BEGIN PUBLIC KEY----- 41 MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDS6VbgEpOwVc8jXYx/uL6ItMS6 42 aBPVo8fvw0pd90jLJYvfJcFJdYVFh6JPRdpGhlIrED45VdsktcJvJj0cLNI5ZIZ6 43 80aS6JTFe3ScBY4Mi7bLKzBNYtMBtnkAFbMmWlCXV4qzZYg8+xNktY5ClZZCvZzz 44 laU5djtUSoxTLkxcmwIDAQAB 45 -----END PUBLIC KEY-----'; 46 47 //这个函数可用来判断私钥是否是可用的,可用返回资源id Resource id 48 $pi_key = openssl_pkey_get_private($private_key); 49 50 //这个函数可用来判断公钥是否是可用的 51 $pu_key = openssl_pkey_get_public($public_key);//这个函数可用来判断公钥是否是可用的 52 53 print_r($pi_key); echo "
"; 54 print_r($pu_key); echo "
"; 55 56 // 原始数据 57 $data = 'codeman'; 58 $encrypted = ''; 59 $decrypted = ''; 60 61 echo "source data:",$data,"
"; 62 echo "private key encrypt:
"; 63 echo "私钥加密,公钥解密:
"; 64 65 // 私钥加密 66 openssl_private_encrypt($data, $encrypted, $pi_key); 67 $encrypted = base64_encode($encrypted);//加密后的内容通常含有特殊字符,需要编码转换下,在网络间通过url传输时要注意base64编码是否是url安全的 68 echo $encrypted,"
"; 69 70 // 公钥解密 71 echo "public key decrypt:
"; 72 openssl_public_decrypt(base64_decode($encrypted),$decrypted,$pu_key);//私钥加密的内容通过公钥可用解密出来 73 echo $decrypted,"

"; 74 75 echo "公钥加密,私钥解密:
"; 76 //公钥加密 77 openssl_public_encrypt($data, $encrypted, $pu_key); 78 $encrypted = base64_encode($encrypted); 79 echo $encrypted,"
"; 80 81 // 私钥解密 82 echo "private key decrypt:
"; 83 openssl_private_decrypt(base64_decode($encrypted),$decrypted,$pi_key);//私钥解密 84 echo $decrypted,"
";
复制代码

 

6、PHP openssl和mcrypt扩展的区别

openssl是一种公私钥的网络通信安全协议,也算一种加密模式,php的openssl扩展是为了用这个协议加密和解密传输数据用的。与mcrypt相比,openssl支持更多的加密方法,使用更加简单,支持非对称加密解密,是安装签名https的核心组件。

关键字

上一篇:

下一篇:Mbstring PHP Extension