这篇文章主要介绍加解密算法,以及在PHP中如何使用
按大类划分,加解密分为两大类:对称加密和非对称加密。
简单的区分就是,对称加密,加解密用的是同一套秘钥;非对称加密则有公私两个秘钥,公钥用来加密,私钥用来解密。
相关函数的使用可以参考官网的函数手册,其中会有对应的示例可用来参考。
对称加密
对称加密的常规算法有:DES,3DES,AES等,支持一些模式,如 ECB,CBC,CTR等。
PHP中的 OpenSSL扩展提供了现成的函数openssl_encrypt
和openssl_decrypt
针对对称加密,支持多种加密算法,包括国密 SM4,可通过openssl_get_cipher_methods
查看具体支持的算法。
参考资料
非对称加密
非对称加密使用算法RSA
,区别在于不同的秘钥长度,现阶段推荐秘钥长度为2048位或者更高。相关的原理可查博客园或维基百科。
PHP中的使用范例
// 生成密钥资源id,此函数主要用来校验公私秘钥是否能够正常使用
$pi_key = openssl_pkey_get_private($private_key);
$pu_key = openssl_pkey_get_public($public_key);
// 私钥加密,除了这样使用之外,也可以直接原生的秘钥内容,不进行提取
$encrypted = ‘’;
openssl_private_encrypt($data, $encrypted, $pi_key);
// 转码,这里的$encrypted就是私钥加密的字符串
$encrypted = base64_encode($encrypted);
// 公钥解密,$decrypted即为公钥解密后私钥加密前的明文
$decrypted = ‘’;
$encrypted = base64_decode($encrypted);
openssl_public_decrypt($encrypted, $decrypted, $pu_key);
参考资料
哈希散列值
散列值计算是单向的,因为无法反向推导,一般用来进行各种校验。比如用户的登录秘钥,数据传输的签名。
算法一般是MD5
,SHA
。
实际的操作中一般会加“盐”来增加破解的难度,无法通过简单的撞库来探测。
实战
在https
的情况下,理论上来说,数据传输加上签名就OK。不过实际使用中,在一些特别强调安全性的场合,在https
的基础上依然会加密加签名。
资料查找
这篇文章非常的粗略,属于概括性的介绍,实际使用中的细节部分并没有多少涉及,现网上有很多这样细节性的内容。
维基百科和博客园都是不错的信息查找源。
查找举例
搜索栏:加解密 site:cnblogs.com