近期由于工作调整的原因,很久没有写新的文章,很多朋友的留言也没有回复,十分抱歉。 本篇随笔主要依据一次应用对"非对称加密"的常用领域进行介绍,已经很了解的同学请跳过本文,以免浪费你的时间。 1.问题的提出 写这篇随笔,主要是因为公司最近要发布一个小产品,帮助用户进行一些资源预约,比如会议室什么的。这个所谓的产品是个Web网站,而这个网站客户要求发布在局域网内部。 好的,这就是产品的现状,现在老大说,这个玩意儿要收费了,几千块钱能让用户用三个月,到期后不续费就不能继续使用。 博主所在的小组收到任务去实现这个收费功能,其实要实现这个功能有很多方案,给Web程序一个注册号,使用WebService来验证这个注册号是否到期,这应该是最简单的一种实现方式,但是由于这个Web网站是发布在局域网的,所以这个解决方案被PASS掉了 2.解决方案 最终我们提出的解决方案是:发给客户一个注册文件,该注册文件中包含一个有效期,在Web程序中,我们访问该注册文件,如果注册文件中的有效期已经到期,则阻止用户继续访问。 针对我们提出的解决方案,我们很自然的想到几个问题 3.非对称加密 非对称加密能够提供一对密钥,公钥和私钥,使用公钥加密的内容无法使用公钥进行解密,必须使用其对应的私钥才能解密,反之亦然,正好符合我们的要求: 4.非对称加密的常用领域 使用非对称加密时我们一般会将私钥保留,将公钥分发给用户,当然,具体的分发动作是通过证书还是怎么样不在我们这次的讨论范围内
第二种场景是我们使用私钥进行加密,公钥的持有人都可以使用公钥进行解密,这样,公钥持有人就可以确认该内容是由私钥的持有人发布出来的,同样,由于非对称加密和解密比较耗时的原因,我们可以对该实现方式进行改良,最常见的改良方式为:我们可以对明文进行散列操作,最终将明文散列为较短的一个散列码,然后我们使用私钥对该散列码进行加密,在公钥的持有人收到消息后,可以重复上面的操作,比对自己的散列码和解析出的散列码是否相同,如果相同,则可以证明该消息是由公钥的持有人发布的,这就是我们常说的电子签名,当然我们也可以将上面提到的对称密钥的发布过程也包含在电子签名的过程中,以此来保证消息的内容只有公钥的持有人能够查看
通过上面两种应用场景我们可以发现,非对称加密算法只要能够满足128个字节的加密就能满足所有的应用需求。 5.问题的解决 到此,我们的问题已经可以解决:
这样我们既可以保证消息内容的可靠性又保证了消息内容的完整性,问题解决!! 6.使用MD5进行加密?? 经常听到有人说:“我们的用户密码使用MD5、SHA1进行加密”等等说法,其实我个人觉得,MD5和SHA1不能说是一种加密算法,更确切的说是一种散列(HASH)算法,理想状态下,不同内容使用MD5/SHA1进行散列后的得到的散列码是不一样的,由于散列算法理论上来说是一种不可逆的算法,所以很多网站使用散列算法来对其用户密码进行保护,最常见的使用方法是:将用户注册时的密码散列后保存到数据库中,在用户登录时,将用户输入的密码进行散列,和数据库中的散列码进行比较,如果二者相同,则可以正常登录。网上流行的MD5的破解器其实也就是将常见的字符组合进行暴力破解,如果用户的密码足够复杂,则使用散列算法进行密码保护既可以免去保存密钥的麻烦,又可以保证数据库和网络传输过程中密码的安全性,不失为一种比较好的解决方案 |
|