今天,我们对信息安全越来越受重视,WEB开发中的各种加密也变得更加重要。通常跟服务器的交互中,为确保数据传输的安全性,避免被⼈抓包篡改数据,除了 https 的应⽤,还需要对传输数据进⾏加解密。今天我们来了解下有哪些常见的加密⽅式。 单向散列(hash)加密是指把任意长的输⼊串变化成固定长的输出串,并且由输出串难以得到输⼊串的加密⽅法,这种⽅法称为单项散列加密。⼴泛应⽤于对敏感数据加密,⽐如⽤户密码,请求参数,⽂件加密等。我们开发中存储⽤户密码就⽤到了单向散列加密算法。
常见的单向散列加密算法有:
MD5节能转轮除湿机
SHA
MAC
CRC
单向散列加密算法的优点有(以MD5为例):
⽅便存储:加密后都是固定⼤⼩(32位)的字符串,能够分配固定⼤⼩的空间存储。
损耗低:加密/加密对于性能的损耗微乎其微。
⽂件加密:只需要32位字符串就能对⼀个巨⼤的⽂件验证其完整性。
不可逆:⼤多数的情况下不可逆,具有良好的安全性。
单向散列加密的缺点就是存在暴⼒破解的可能性,最好通过加盐值的⽅式提⾼安全性,此外可能存在散列冲突。我们都知道MD5加密也是可以破解的。
对于PHPer来说,不推荐使⽤md5()简单加密,⽽是推荐⼤家使⽤password_hash()对数据加密存储,该函数使⽤⾜够强度的单向散列算法创建密码的哈希(hash),使加密后的数据更加安全可靠。对于⽤户密码的加密存储和验证⽀持相当好。
⽰例代码:
//密码加密
$password = '123456';
$passwordHash = password_hash(
$password,
PASSWORD_DEFAULT,
['cost' => 12]
);
//密码验证
if (password_verify($password, $passwordHash)) {
//Success
} else {
单人飞行器>电子元器件封装
//Fail
}
同⼀个密钥可以同时⽤作数据的加密和解密,这种⽅法称为对称加密。应⽤于相对⼤⼀点的数据量或关键数据的加密的场景。我们开发中常⽤到接⼝参数签名验证服务就⽤到了对称加密算法。 常见的对称加密算法有:
DES
AES
AES 是 DES 的升级版,密钥长度更长,选择更多,也更灵活,安全性更⾼,速度更快。
对称加密优点是算法公开、计算量⼩、加密速度快、加密效率⾼。
缺点是发送⽅和接收⽅必须商定好密钥,然后使双⽅都能保存好密钥,密钥管理成为双⽅的负担。
对称算法的安全性依赖于密钥,泄漏密钥就意味着任何⼈都可以对他们发送或接收的消息解密,所以密钥的保密性对通信的安全性⾄关重要。
PHP⽰例
//DES加密
$key = '123kils1321dshfdsvcxpUsdaq23'; //安全密钥
$data = 'name=iphone11&order_id=201233232323123&price=3357&num=2';//加密明⽂
$decodeData = openssl_encrypt($data, 'DES-ECB', $key, 0);
使⽤PHP⾃带的openssl_encrypt加密⽅法,对数据进⾏DES加密结果如下:
oc3PdhugNue/t3i8HfXjd9YUP9BnTLg0Re9R1u2fsZr0jU2hIpCIjR0bruAwNSIGkqulrNHGYm8=
另外⼀⽅在拿到密⽂后,再使⽤相同的密钥,使⽤openssl_decrypt()对密⽂进⾏DES解密:
$key = '123kils1321dshfdsvcxpUsdaq23'; //安全密钥
$decodeData = 'oc3PdhugNue/t3i8HfXjd9YUP9BnTLg0Re9R1u2fsZr0jU2hIpCIjR0bruAwNSIGkqulrNHGYm8=';
$de = openssl_decrypt($decodeData, 'DES-ECB', $key, 0);茶叶电炒锅
集束天线
echo$de;
运⾏代码,最后得到解密后的结果:
name=iphone11&order_id=201233232323123&price=3357&num=2
⾮对称加密
⾮对称加密是指需要两个密钥来进⾏加密和解密,这两个秘钥分别是公钥(public key)和私钥(private key),这种⽅法称为⾮对称加密。⾮对称加密适合于对安全性要求很⾼的场景,适合加密少量数据,⽐如⽀付数据、CA数字证书等。
常见的⾮对称加密算法有RSA,RSA2。
⾮对称加密的优点是与对称加密相⽐,安全性更好,加解密需要不同的密钥,公钥和私钥都可进⾏相互的加解密。
缺点是加密和解密花费时间长、速度慢,只适合对少量数据进⾏加密。
⾮对称加密算法的RSA2⽐RSA有更强的安全能⼒。蚂蚁⾦服,新浪微博都在使⽤ RSA2 算法。
创建公钥和私钥:
openssl genrsa -out private_key.pem 2048
摩擦搅拌焊接openssl rsa -in private_key.pem -pubout -out public_key.pem
执⾏上⾯命令,会⽣成private_key.pem和public_key.pem两个⽂件。
具体⽰例代码我们在后续的⽂章专门会讲解,敬请留意。
前端加密
前端的朋友可能会关注前端js加密,我们在做 WEB 的登录功能时⼀般是通过 Form 提交或 Ajax ⽅式提交到服务器进⾏验证的。为了防⽌抓包,登录密码肯定要先进⾏⼀次加密(RSA),再提交到服务器进⾏验证。⼀些⼤公司都在使⽤,⽐如淘宝、京东、新浪等。
前端加密也有很多现成的js库,如: