HTML5技术

常见的几种数据加密与应用场景 - 连程

字号+ 作者:H5之家 来源:H5之家 2017-03-14 15:00 我要评论( )

常见的几种数据加密与应用场景 起因最近被一个同事问到,在网络交互中,那部分数据需要被加密那一部分不需要被加密。我觉得这个问题有点太泛了,所以给他科普了一次常见的数据加密与应用场景的课。突然间觉得这个还挺有教育意义的。所以我还是吧这个记录一下

常见的几种数据加密与应用场景

起因 最近被一个同事问到,在网络交互中,那部分数据需要被加密那一部分不需要被加密。我觉得这个问题有点太泛了,所以给他科普了一次常见的数据加密与应用场景的课。突然间觉得这个还挺有教育意义的。所以我还是吧这个记录一下吧。 啊,年轻犯下的错

当初我们给某个建站平台做手机客户端的时候就没有考虑这些事情,现在想想被攻击实在是太简单了。我们当初做的内容其实根本就没有数据加密的防护,所有的内容都是公开的。尴尬尴尬。

前一段时间的钓鱼Wifi是怎么做的

我想讲明白这件事情,你首先得了解一下DNS究竟是怎么工作的。作为一篇数据加密的文章呢,我就不做太多的DNS的介绍,这类介绍应该很多。简单点说,就是通过URL转换为IP的一个步骤。很多时候,连接网络之后,如果你不特殊设置,会遵循路由给你的推荐设置。比如下图,就是我电脑的截图。

当我访问网络的时候,比如说那么浏览器会首先查询这个地址的IP是啥。中间的查询过程就不描述了,一般会询问道上图中的10.8.8.8这个服务器中,然后返回淘宝的正确IP地址,然后发起协议,获取网页数据。然后展示出来网页。当然这个是正常情况下,如果DNS告诉你的网址并不是正常的网址,比如说有人写的跟淘宝一毛一样的一个网站你也浑然不知道。如果你在他们网页上输入了账号密码,然后提交的话。实际上就把这个消息发送给了这个网站的制作者,达到了钓鱼的目的。对付小白用户这样肯定是一来一个准,不过大部分人在进入这个系统之后就会发现猫腻了,比如说登陆了很多次,明明账号密码都是对的却登陆不上,进入系统之后发现数据不对,比如说,我之前买的东西居然没有之前订单了。一般人就会警觉可能被钓鱼了。然后修改密码。这样钓到账号密码就已经失效了。

怎么来做一个简单高效,不容易被发现的钓鱼Wifi

怎么叫做个简单呢?就是我不用去架设各式各样的假网站,我可以直接截获真网站的各条网络协议。当然了如果路由器支持这是非常方便的事情。不过我对于这种事情并没有设么研究,咱是一个程序员。咱们考虑的当然是怎么用咱的程序解决这个问题。比如说通过反向代理某些网站,比如说反向代理淘宝。你访问我的代理跟你直接访问淘宝是一样的结果。然后我在我的代理上绑定淘宝的域名。当然了,这样做一般是没有效果的,因为访问淘宝的请求不会到我这边来,因为DNS解析并不是指向我的。但是如果这个路由器是我的,那么,我就可以让访问淘宝的请求指向我。这样一来,我就建设好了一个域名是淘宝内容也是淘宝的代理服务器,我就能拿到你所有的网络请求。这只是一个架构设想,千万别拿来做坏事,咱们只讨论技术。其实就是网络请求的截取,我们也只是简单的讨论这一种还有很多很多请求截获手段,我们就不讨论了。

怎么进行攻击防御

这个命题就变成了

怎么让攻击者拿到你的网络请求,却没有什么用

起因中也介绍了,这是一个跟一个同事讨论引起的帖子,那么,我先贴上他当时回答。他说数据加密就可以了呀。可是数据加密分很多种呀,你觉得那种数据加密在这个场景下会奇效呢?他说MD5、对称加密、非对称加密。实际上这个地方只有一种数据加密是有效的。来,让我们来分析一下哪个是有效的。

MD5

在用户密码的处理中这是一种非常常见的处理方式(尽管MD5从严格意义上来说并不属于一种加密算法,他是将内容提取样本到一个字符串。因为之前在做项目的时候,用户密码都是用这个处理的,所以作者也误认为这是一种加密算法。被多位网友热情指出,尽管他并不是一种加密算法,但是还是把他放到这里吧。因为文章已经写完了。我有懒得改,就这样吧)。但是在登陆场景下这种数据加密方式并不常用。如果使用MD5来进行登录,一般情况需要将用户密码 + 当前时间分钟戳,然后算出一个密文提交给服务器,服务器拿到信息之后,将密码 + 当前时间和当前时间的前后各一分钟算出三个结果。如果客户端提交的数据在三个数据之中,那么就登陆成功,否则就登陆失败。不过这种用法比较局限性。如果你想连用户名都隐去,这种方式是做不到的。

对称加密

首先得了解对称加密是什么,对称加密是加密解密用同一个密钥。前端在加密的时候,你肯定要在前端输出一边明文密钥。那么传送的是什么。找到你的密钥之后,你传送的数据不论是什么都可以直接进行解密。

非对称加密

这才是正规改用的方式,在服务器上公开公钥。客户端、Web页面拿到公钥之后。将内容加密,然后传送给服务器,服务器进行数据解密。这样的话,就算是被人拿到你的信息,也不怕你的数据泄露了。因为没有地方公开私钥,只有服务器自己知道。这样你的账号密码就可以得到有效的保护。

那么加密的时候,我都需要怎么处理呢?

或许你会这么想,如果我数据都要加密那得多累?服务器能够受的了吗?如果只是登陆部分进行加密,那么其他的连接信息怎么保证用户信息不背泄露呢?会不会存在特殊情况呢?这几种加密方式都什么时候会用的到呢?

举个例子 登陆

前面我们已经讲过了,有两种实现方式MD5+时间戳。或者非对称是加密方式。

注册

这个恐怕只能用非对称加密算法了。因为你得让服务器知道账号密码的原始内容,却不能让截获者知道。

其他需要身份认证的协议

一般情况下,我们的身份认证是通过一个Token(其实这个东西不一定存在什么地方,有的时候是放到Body里边的有的时候是放到Cookie的,有时候是放到Head里的,放到什么地方不重要,关键是他的意义)来做的。那么保护好这个Token就非常重要了,因为你的Token一旦被别人抓到了。那么你的消息也就泄露了。其实这个比用户名、密码来的还要更加麻烦一些。因为用户名密码你需要拿到原始明文才算数。但是Token不一样。他直接使用密文也是一样的,因为服务器解密之后会发现你上传来的数据是对的。关于这个,有几种方式来处理来让Token失效,这个一会我们在讲。

其实聊天中也比较常用

其实非对称式加密,聊天的过程中用的更多。你想,你的聊天不希望其他人看到的吧。因为毕竟这个是你的隐私呀。所以一般是两个客户端互持对方公钥,然后发送消息。不过如果传送对象是一个群,你需要发送消息给每个人。如果这个群里边有200个人,那么你需要将内容压缩成200种密文然后发送吗?那也忒费劲了。好在我们还有对称加密,我们可以首先使用非对称加密的方式,将对称加密的密钥发送给个个人,然后将内容通过对称加密加密,然后发送给个个人,让他们用之前的对称加密的密钥解密,就可以完美的解决这个问题。当然了,对于大点的内容也是一样的。因为非对称加密的性能是比不上对称加密的。

日防夜防,家贼难防

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 一个小时学会MySQL数据库 - 张果

    一个小时学会MySQL数据库 - 张果

    2017-03-09 17:01

  • 基于 socket.io, 简单实现多平台类似你猜我画 socket 数据传输 - HOWIE-CH

    基于 socket.io, 简单实现多平台类似你猜我画 socket 数据传输 - HO

    2017-03-09 17:00

  • vue的进阶 标签属性数据绑定和拼接 - kengwfpzu920

    vue的进阶 标签属性数据绑定和拼接 - kengwfpzu920

    2017-03-03 16:02

  • 数据库MySQL调优实战经验总结 - 肖邦linux

    数据库MySQL调优实战经验总结 - 肖邦linux

    2017-02-18 13:02

网友点评