PHP加密-单向散列加密,对称散列加密,非对称散列加密
关于PHP加密的三种解释及特点:
信息加密:
背景:2011年12月被曝光的****密码泄露事件中,网站安全措施不给力,导致用户数据库被黑客“拖库”,令人错愕的事数据库中的密码居然是明文保存,导致密码泄露,成为地下交易的商品
通常,为了保护网站敏感数据,应用需要对信息进行加密处理,信息加密技术科分为三类:单向散列加密,对称散列加密,非对称散列加密
1. 单向散列加密:
指的是通过对不同输入长度的信息进行散列计算,得到固定长度输出,这个散列计算过程是单项的,也就是说 只能加密 不能解密 唯一的办法就是用相同的算法对接收的数据进行加密 然后进行比对
–>明文–>单向散列算法–>密文–>
利用这个特征,可以对密码进行加密保存,即用户注册时输入的密码不直接存到数据库 而是对密码进行单向散列加密 然后在进行入库。当入户字词登陆时 将得到的密码是用同样的算法进行加密 然后和数据库的密码案进行比对 如果比对正确 则密码验证成功 如图:
这样保存在数据库中的用户密码则是密文保存 而且不可逆的计算得到密码的明文,因此即使数据库呗“拖库”,也不会泄露密码信息
虽然不能通过算法将单向散列密文暗算得到明文 但是由于人们设置的密码具有一定的模式 可以对战彩虹表(常用密码与对应密文关系表)等手段进行猜测
为了加强单向散列加密的安全性 可以给散列计算加点盐(salt) salt相当于imitate的秘钥 增加**难度
常用的单向散列加密 MD5 SHA1 单向散列加密还有一个特点就是 一个数据的细微变化 都会导致最终的加密加过的不同 这个特性有时也用来生成信息摘要 计算具有高离散程度的随机数用途
2.对称散列加密:
所谓对称加密就是指加密和解密使用的秘钥是同一个秘钥(或者可以互相推算) 如图:
对称加密通常用在信息需要安全交换或存储的场合 如cookie加密或通信加密等
对称加密的优点:算法简单,加解密程度不高,系统开销小,适合对大量数据加密,
缺点:加密使用同一个秘钥,远程通信的情况下,如何安全的交换秘钥是个难题,如果秘钥丢失,那么所有的加密信息也就没有秘密可言了
常用的对称加密的算法:DES算法,RC算法等。对称加密是一种传统的加密手段,也是最常用的加密手段 适用于绝大多是的加密场合
3. .非对称加密:
不同于对称加密,非对称加密和解密不使用同一个秘钥,其中一个是对外界开放的公钥 称作公钥 另一个只有所有者知道 称为私钥,用公钥加密的信息必须用对应的私钥来解密 同样 使用私钥加密的信息也必须使用对应的公钥来解密,如图:
非对称加密技术通常用在信息安全传输 数字签名等场合
信息发送者A通过公开渠道获取B的公钥,对提交的数据使用公钥加密,然后通过非安全传输通道传输给B,B得到密文后 使用自己相对应的秘钥进行解密,获得原始明文信息,在数据传输的过程中 机试信息被盗取 盗窃者没有对应的私钥 也是不能对信息进行解密还原成原文的
数字签名则相反,签着用自己的私钥进行数据加密,然后发送给对方,接收者用签名者的公钥对信息进行解密,获得原始明文信息,由于私钥只有签名者拥有,因此该信息是不可抵赖的,具有签名性质
在实际应用中,常常会是使用对称加密和非对称加密,先使用非对称加密技术对对称秘钥进行安全传输 然后是使用对称加密进行数据加解密和交换 然而有的时候对同一个数据使用两次非对称加密,可同时实现信息安全传输与数字签名的目的
网站秘钥安全管理:
前面的几种的加密技术,能够达到安全保密效果的一个重要前提是秘钥的安全 如果秘钥呗盗取 无论你做任何加密 都是没有意义的,
信息的安全是靠秘钥来保证的,但在实际中经常看到 有的程序员直接把秘钥写在源码中,号位好一点的放在配置文件中,线上和开发环境使用不同的秘钥,总之秘钥本身是明文存储 而且很多人可以接触到 至少在公司内部 秘钥不是秘密
实践中,改善秘钥存储有两种方式:
一种方案是把秘钥和算法放在一个独立的服务器上,甚至做成一个专用的硬件设施,
对外提供加密和解密的服务。应用系统通过调用这个服务,麾下你数据的加解密,由于秘钥和算法是独立部署的,有专人维护,是秘钥泄露的概率大大降低,但是这种方案成本高,而且有可能会成为应用的瓶颈,每次加密,解密 都需要进行一次远程服务的调用,系统性能开销很大
另一种方案是将加解密算法放在应用系统中,要则放在独立的服务器中,为了提高秘钥的安全性,实际存储时,秘钥呗切分成数片 加密后分别保存在不同存储介质中,兼顾要安全性的童谣又改善性能 如图:
应用程序调用秘钥安全管理系统提供的加解密服务接口对信息进行加解密,该接口实现了常用的加解密算法,并可以根据需求任意扩展 加解密接口通过秘钥服务器的秘钥服务去的加解密秘钥,并缓存在本地(定时更新) 而秘钥服务器中的秘钥则来自多个秘钥存储服务器 一个秘钥分片后存储在多个存储服务器中,每个服务器都有专人负责管理,秘钥申请者,秘钥管理者,安全审核人员通过秘钥管理控制台管理和更新秘钥 每个人各司其职,没有人能查看完整的秘钥信息