PHP的OpenSSL加密扩展使用摘要(推荐)

PHP的OpenSSL加密扩展使用摘要(推荐)
介绍

互联网发展的历史,安全性一直是一个开发商相当重视的话题,为了实现数据传输的安全性,我们需要确保数据源(非伪造的请求)和数据的完整性(不修改),数据隐私(密文,不能直接读取)。虽然HTTPS协议是由SSL / TLS协议的实现,因为浏览器在客户端的正确实施,而且效率很低,一般的敏感数据,如交易支付信息,还需要我们使用加密方法手动加密。

虽然对于一般的Web开发人员,不需要了解一些基本的安全相关技术,而是学习加密的基本知识和使用现有的加密相关的工具是非常必要的。由于工作需要,我读了一些加密的相关文章,结合自己的经验,来完成这篇文章。

加密的基础

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

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

对称加密

对称加密算法,消息发送方和接收方使用相同的密钥,发送方加密文件的密钥,和接收器使用相同的密钥进行解密,得到信息。常见的对称加密算法有:DES和AES / 3des。

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

非对称加密

非对称加密是相对于对称加密的。非对称加密的核心思想是使用一对相对密钥,将密钥分为公钥和私钥,私钥安全地保存,公钥公开,公钥和私钥为一对。如果我们使用公钥加密数据,我们可以使用相应的私钥解密它。如果我们使用私钥加密数据,我们只能使用相应的公钥进行解密,在发送数据之前,只需用接收方的公共密钥进行加密,一般的非对称加密算法都有RSA/DSA:

非对称加密虽然没有密钥问题,但计算量大,加密速度慢,有时需要对大量数据进行加密。

数字签名

为了确保数据的完整性,散列函数也需要散列值来计算,称为数字签名:

不管原始数据有多大,结果的长度都是一样的。

输入是相同的,输出是相同的。

输入的微小变化会使结果发生很大的变化。

加密过程是不可逆的,不能用哈希值来表示原始数据。

普通的数字签名算法有MD5、hASH1等算法。

PHP的OpenSSL扩展

OpenSSL扩展了OpenSSL加密扩展包,封装了几个PHP函数进行加密和解密,并对数据进行了大量的解密和解密:

对称加密相关:

字符串(字符串的数据,openssl_encrypt字符串的方法,字符串的密码

其中$数据是要加密的数据,$方法是加密的方法,密码是使用的密钥,函数返回加密数据。

该方法可以通过使用美元的名单openssl_get_cipher_methods(),我们选择其中之一使用,和$方法列表是一样的:

(阵列
0 = > AES-128-CBC / AES加密
1 = DES加密
2 = > des-ede3 / 3DES加密


解密函数的字符串(字符串的数据,openssl_encrypt字符串的方法,字符串的密码)

非对称加密相关:

openssl_get_publickey(openssl_pkey_get_public);(); / /来自公共密钥证书;
openssl_get_privatekey(openssl_pkey_get_private);(); / /来自证书的私钥;
他们都只需要在证书文件传递(generally.pem文件);
openssl_public_encrypt(字符串数据,字符串加密,混合关键{ int美元,美元_pkcs1填充= OpenSSL _padding })
使用公共密钥加密数据,这为数据加密数据加密;美元是参考变量,加密的数据将被放入这个变量;$关键是公共密钥输入数据;因为加密的数据包,它可能不只是位加密多数,所以需要填充(填充美元美元可选填充),openssl_pkcs1_padding,openssl_no_padding,PKCS#1分别填充或无填充物的使用;

与此方法相反(传入参数是一致的):
(openssl_private_encrypt); / /使用私有密钥加密;
(openssl_private_decrypt); / /使用私钥进行解密;
(openssl_private_decrypt); / /使用公钥解密;
还有签名和检查功能
布尔openssl_sign(字符串数据,字符串的签名,混合priv_key_id美元{,混合signature_alg = openssl_al_sha1美元})
国际openssl_verify(字符串数据,字符串的签名,混合pub_key_id美元{,混合signature_alg = openssl_al_sha1美元})
签名功能:为数据要签名的数据为参考变量;$签名签名的结果;priv_key_id美元的签名用的私钥;signature_alg美元是用于签名的算法,其算法的列表可以通过openssl_get_md_methods()。
(阵列
0 = MD5,
1 = SHA1,
2 = SHA256,


检查函数:与签名函数相比,它只导入与私钥相对应的公钥。因此,签名验证的结果是1, 0是失败的,而1是错误的。

加密实例

下面是使用非对称加密的一个小例子:
获取公钥
pub_key美元= openssl_get_publickey(测试。PEM);

加密=;
数据块加密
为($偏移= 0,长度= strlen(raw_msg美元美元美元美元抵消);<<长度;偏移key_size美元美元){
encryptedblock美元=;
数据= substr(raw_msg美元美元美元美元,抵消,key_size)
如果(!openssl_public_encrypt($数据,encryptedblock美元,pub_key美元,openssl_pkcs1_padding)){
返回' ';
{人}
加密encryptedblock美元美元=;
}
返回$加密;
与对称加密非常简单,直接使用ssl_encrypt()函数。

当然,有些接口可能对加密方法有不同的要求,如不同的填充、块大小等,这需要用户自行调整

由于我们正在处理HTTP协议上的数据,所以数据加密已经完成,并且可以直接发送,而不考虑底层传输。旋度或SOAP扩展方法可以直接请求接口。

后记

密码学是一个很深奥的学科,它的理论是很难的,有这么多的概念,作为一个Web开发人员,但它不是我们研究底层的实现是必要的,但要学会如何使用封装好的方法是我们的发展非常有利。即使了解基本实现,可以一个人,有算法的新认识。

上面的PHP的OpenSSL加密扩展是一个摘要。有一点可以和你分享。我们希望能给你一个参考,希望你能支持它。
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部