项目开发过程中我们一定要考虑的问题,就是用户敏感数据的安全性,本文主要针对http通信进行分析,以下是个人总结的一些方案(用于服务器与客户端之间的一些密文传输),至于HTTPS可以做加密处理也可不做,因为HTTPS相对安全很多。
-
加密主要分为对称加密,非对称加密,hash加密
-
1.对称加密:它的特点是文件加密和解密使用相同的密钥加密。常见算法:DES、3DES、Blowfish、IDEA、RC4、RC5、RC6和AES 。
优点:对称加密算法使用起来简单快捷,密钥较短,且破译困难。
缺点:一旦秘钥泄露或无意间更改,则会出现很多问题。 -
2.非对称加密:与对称加密算法不同,非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。常用算法:RSA、ECC(移动设备用)、Diffie-Hellman、El Gamal、DSA(数字签名用)。
优点:公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。
缺点:使用起来相对复杂。 -
3.Hash加密:典型代表(MD5),因为它是不可逆的32位加密方式。但是有一个网站可以直接查询MD5字符串(http://www.cmd5.com),然后得到明文,所以纯粹的一次MD5也是不可靠的,那么问题来了,怎样处理才能让别人没办法破解你的密文呢?
https://pan.baidu.com/s/1oZP7BIdXlkmFw25rJQxPFw 密码:sstt ,这个是几种加密算法的代码,在本文中咱们主要讲解MD5的一些使用,只讲思想,若要看代码请到上面链接下载。
下面咱们来模拟登陆操作
- 1、对密码进行多次MD5——虽然这种方式避免了别人破解你的密码,但是人家可以通过抓包,抓到你的密文,然后再抓到你的请求地址,模拟你的登陆操作,这样你的账号就成功的被黑客登陆了。
- 2、对密码进行一次MD5,然后再进行加盐操作(即在密文后加一个随意字符串,这个字符串只有你和后台知道)——缺点和上面一点一样。
- 3、对密码进行一次加密,然后加一个时间字符串(具体到分:2017-1108-08:38,格式可以自己定),然后再对整体字符串进行两次Md5加密(这一步是为了让黑客看不到明文的时间字符串,他就推不出我们的加密方式);有人会问了,这样黑客也可以抓包,然后模拟登陆操作啊,可是,我们得密文是不是每分钟都在变呢,这样,黑客拿到密文也只有一分钟时间,在一分钟时间内,他还要破解我们的请求地址等一系列操作,一般的黑客都是批量操作,所以就算他拿到我们上一分钟的密文,当他进行黑客攻击时,这个密文已经失效了,这样我们就尽可能的降低了被攻击的可能性。
那么问题来了,服务器怎么操作才能保证用户的登录操作成功呢??
服务器在用户注册时,肯定保存了用户的密码,然后服务器需要做的也是跟客户端一样,先进行一次MD5,然后加一个时间字符串,然后再进行两次MD5加密。(唯一不同的是,服务器需要加两次不同的时间字符串对比两次,第一次对当前分钟,第二次往前推一分钟,这样做是为了防止,用户登录请求时,恰好是在上一分钟的最后一秒,然而请求到达服务器时已是下一分钟)。
其实这个还是存在一个小问题,假如服务器时间与客服端时间不同步,怎么办??很简单:在客服端程序启动时就先同步两端时间,将两端时间差值计算出,然后在每次登陆请求时,客服端加的时间字符串加上差值再进行加密传输。这样不就避免了这个问题吗。。。
网友评论