今天和一个小兄弟讲解加密的东西,从登录验证码说到单点登录,发现技术确实是整合了才能在实际中运用。
1、验证码是为了识别操作人是电脑还是人类,皮皮书屋就更牛了,识别的是程序员
2、MD5做为散列算法是很有效的,但网上已经有大量的MD5与明文对照表,因此需要在用户表中加个Salt字段,该字段值也是随机产生的,可以有效避免数据库信息泄漏后的密码破解。
3、DES等对称算法虽然好用,但无法识别出密文来源(可能是密匙泄漏后有人伪造),因此需要使用RSA算法。然而RSA算法速度太慢,无法有效加密大量数据,怎么办呢。聪明人就想出了,先用随机算法产生密匙(代号K),并用DES对数据加密,再用RSA对K进行加密,然后把2个密文都传给对方。为了验证密文解出的是否正确,最好还把明文数据做一次散列运算,也用RSA加密该散列值。
4、上述RSA的关键是公私密匙的保管如何能更安全,聪明的人类又想到了写到硬件里,这就是我们手上一堆银行的U盾的来由。从逻辑上的角度来看,U盾是验证码的升级:识别操作者是帐号所有者本人。
5、单点登录有很多种,这里只说类网银的做法,这种做法我们在多系统中也可以很好的运用。超连接上带有各种需要传递的信息,如:用户名等。同时还要带上MD5(用户名... + Key + DateTime或Guid),Key是事先在2个系统上已经存好的,Guid可以让该MD5值每次都不一样,而且只能一次有效(需要数据库记录该值,类似于充值卡只能一次有效)。如果是DateTime,则不需要记录数据库,但要处理好2台服务器可能时间不同步的问题,简单的解决办法是接收方评估出可能的时间误差,并把误差内的时间点都算一轮。