openssl加密扩展怎么在PHP中使用

  

openssl加密扩展怎么在PHP中使用?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

<强>引言

互联网的发展史上,安全性一直是开发者们相当重视的一个主题,为了实现数据传输安全,我们需要保证:数据来源(非伪造请求),数据完整性(没有被人修改过),数据私密性(密文,无法直接读取)等,虽然现在已经有SSL/TLS协议实现的HTTPS协议,但是因在客户端上依赖浏览器的正确实现,而且效率又很低,所以一般的敏感数据(如交易支付信息等)还是需要我们使用加密方法来手动加密。

虽然对于一般的网络开发人员来说,大可不必深入了解一些安全相关的底层技术,但学习加密基础知识,使用现有加密相关工具却十分必要的。由于工作需要,自己看了些加密相关文章,结合自己的使用经历,完成此文。

<强>加密基础

学习如何使用加密之前,我们需要了解一些加密相关的基础知识。

加密算法一般分为两种:对称加密算法和非对称加密算法。

<强>对称加密

对称加密算法是消息发送者和接收者使用同一个密匙,发送者使用密匙加密了文件,接收者使用同样的密匙解密,获取信息。常见的对称加密算法有:des/aes/3 des。

对称加密算法的特点有:速度快,加密前后文件大小变化不大,但是密匙的保管是个大问题,因为消息发送方和接收方任意一方的密匙丢失,都会导致信息传输变得不安全。

<强>非对称加密

与对称加密相对的是非对称加密,非对称加密的核心思想是使用一对相对的密匙,分为公匙和私匙,私匙自己安全保存,而将公匙公开。公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密,如果用私钥对数据进行加密,那么只有用对应的公钥才能解密。发送数据前只需要使用接收方的公匙加密就行了。常见的非对称加密算法有RSA/DSA:

非对称加密虽然没有密匙保存问题,但其计算量大,加密速度很慢,有时候我们还需要对大块数据进行分块加密。

<强>数字签名

为了保证数据的完整性,还需要通过散列函数计算得到一个散列值,这个散列值被称为数字签名。其特点有:

?无论原始数据是多大,结果的长度相同的;
?输入一样,输出也相同。
?对输入的微小改变,会使结果产生很大的变化;
?加密过程不可逆,无法通过散列值得到原来的数据,

常见的数字签名算法有md5, hash2等算法。

<强> PHP的openssl扩展

openssl扩展使用openssl加密扩展包,封装了多个用于加密解密相关的PHP函数,极大地方便了对数据的加密解密。常用的函数有:

<强>对称加密相关:

openssl_encrypt字符串(字符串数据,美元字符串方法美元,美元字符串密码)

其美元中数据为其要加密的数据,方法是美元加密要使用的方法,美元密码是要使用的密匙,函数返回加密后的数据,

其美元中方法列表可以使用openssl_get_cipher_methods()来获取,我们选取其中一个使用,美元方法列表形如:

阵列(   0,才能=祝辞,aes - 128 - cbc,,,//, aes加密   1,才能=祝辞,des-ecb,,,,,//, des加密   2,才能=祝辞,des-ede3,,,,//, 3 des加密   ,,…   )才能

其解密函数openssl_encrypt为字符串(字符串数据,美元字符串方法美元,美元字符串密码)

<强>非对称加密相关:

openssl_get_publickey (); openssl_pkey_get_public();,,,//,从证书导出公匙;   openssl_get_privatekey (); openssl_pkey_get_private();,,//,从证书导出私匙;

它们都只需要传入证书文件(一般是。pem文件);

openssl_public_encrypt (string  data 美元;,,string , crypted 美元;,,mixed  key 美元;[,int  padding 美元;=,OPENSSL \ _PKCS1 \ _PADDING ],)

使用公匙加密数据,其中元数据是要加密的数据,美元的地下室是一个引用变量,加密后的数据会被放入这个变量中,美元的关键是要传入的公匙数据,由于被加密数据分组时,有可能不会正好为加密位数多的整数倍,所以需要填充美元(填充补齐),美元衬垫的可选项有OPENSSL_PKCS1_PADDING, OPENSSL_NO_PADDING,分别为PKCS1填充,或不使用填充;

与此方法相对的还有(传入参数一致):

openssl_private_encrypt();,//,使用私匙加密;   openssl_private_decrypt();,//,使用私匙解密;   openssl_private_decrypt();,//,使用公匙解密;

openssl加密扩展怎么在PHP中使用