内容简介:最近两年一直从事与金融相关项目的开发与维护。但是,关于 PHP 加密解密的最佳实践,网上没有人给出一个完美的总结。恰逢最近看了《图解密码技术》一书,对 PHP 加解密有了更深刻的认识。为了避免各位看枯燥的文字理论,开篇我就把总结给出:AES 是对称加密、RSA 是非对称加密。截止目前为止,对称加密用 AES 算法且分组模式使用 CBC,非对称加密用 RSA 算法。
最近两年一直从事与金融相关项目的开发与维护。但是,关于 PHP 加密解密的最佳实践,网上没有人给出一个完美的总结。恰逢最近看了《图解密码技术》一书,对 PHP 加解密有了更深刻的认识。
为了避免各位看枯燥的文字理论,开篇我就把总结给出:
AES 是对称加密、RSA 是非对称加密。截止目前为止,对称加密用 AES 算法且分组模式使用 CBC,非对称加密用 RSA 算法。
一、对称加密
对称加密的特点是加解密速度快,加密后的密文强度目前还没有硬解的可能性。但是,在未来随着计算机性能的提升有可能会出现被破解的可能性。
对称加密的缺点也很明显。对称加密的加密过程与解密过程使用的是同一把密钥。一旦泄漏密钥,加密就失去了任何意义。
根据《图解密码技术》一书的推荐,对称加密目前推荐使用 AES。在 PHP 当中要实现 AES 加解密,是使用 openssl 扩展来实现。所以,请确保你的 PHP 已经开启了 openssl 扩展。
可以通过如下方式检测:
[root@localhost ~]# php -m|grep openssl openssl
或者如下方式检测:
[root@localhost ~]# php --ri openssl openssl OpenSSL support => enabled OpenSSL Library Version => OpenSSL 1.0.2k-fips 26 Jan 2017 OpenSSL Header Version => OpenSSL 1.0.2k 26 Jan 2017 Openssl default config => /etc/pki/tls/openssl.cnf Directive => Local Value => Master Value openssl.cafile => no value => no value openssl.capath => no value => no value
AES 的加密模式属于分组密码模式。所谓分组密码,是加密时把明文按照固定的长度分组,然后再进行加密。当然,细节之处很很多不同。AES 分组模式有多种:ECB、CBC、CFB、OFB、CTR 五种分组模式。目前优先推荐使用 CBC 模式。
如果使用 CBC 模式,那么在加密的时候,就需要一个前置的加密向量 IV。当初博主在使用 AES 来加密的时候,就很奇怪一个对称加密为何要这个向量。因为,在博主寒冰的潜意识里,对称加密只需要一个密钥就 Ok 了。没想到 AES 加密还有多种模式,而这个 CBC 模式恰恰就需要一个这样的向量值。关于这个向量大家可以在网上查阅相关的资料。这个东西非常重要,也非常好理解。
关于 PHP AES 加解密会用到的相关方法:
openssl_encrypt() // 加密。 openssl_decrypt() // 解密。 openssl_cipher_iv_length() // 获取密码 iv 长度。 openssl_random_pseudo_bytes() // 生成一个伪随机字节串 openssl_get_cipher_methods() // openssl 所支持的算法列表。
AES 支持三种强度:128、192、256。128 位的强度最低,但是,加密解密速度较快。256 位强度最高,但是,加密解密速度最低。所以,大家根据自己系统的重要程度选择使用对应强度。通常普通的金融项目使用 192 位完整够用了。顶级的就用 256 位。其他的就用 128 位吧。
二、非对称加密
非对称加密是指公钥加密私钥解密,私钥加密公钥解密的算法。非对称加密的算法有很多。《图解密码技术》一书推荐使用 RSA 算法。它使用起来也非常简单。
要使用 RSA 算法。首先,我们必须生成一对公钥私钥。其实生成公钥私钥很简单。
在 Linux 系统,直接使用如下命令生成:
$ ssh-keygen -t rsa -b 4096
此命令会生 ~/.ssh/
目录下生成两个文件:
[root@localhost .ssh]# ll 总用量 12 -rw------- 1 root root 3243 11月 7 10:09 id_rsa -rw-r--r-- 1 root root 752 11月 7 10:09 id_rsa.pub
id_rsa
是私钥, is_rsa.pub
是公钥。
关于 PHP RSA 加解密会用到的相关方法:
openssl_pkey_get_private() // 获取私钥 openssl_pkey_get_public() // 从证书中解析公钥,以供使用 openssl_private_decrypt() // 使用私钥解密数据 openssl_private_encrypt() // 使用私钥加密数据 openssl_public_decrypt() // 使用公钥解密数据 openssl_public_encrypt() // 使用公钥加密数据
以上就是关于在 PHP 项目开发中,我们使用的加密解密算法的一个总结。博主寒冰在总结过程中难免会有不足之处,还请大家指正!谢谢!
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Ajax设计模式
Michael Mahemoff / 杨仁和 / 电子工业出版社 / 2007-5 / 78.00元
★本书荣获LinuxWorld Linux Journal2006年Editors' Choice awards。 ★绝好的一本ajax 高级读物,建议 每个web 程序员都需要买一本,了解什么是真正的好的web设计--网友 [精彩试读一] [精彩试读二] 本书是一本关于复杂Ajax应用的整体架构设计......一起来看看 《Ajax设计模式》 这本书的介绍吧!