web 开发领域会涉及到的各种安全技术(publish by sunwei)

其中包括:加密技术[对称加密,非对称加密],数字信封,消息摘要,数字签名等技术。现在我们慢慢分析一下:

对称加密:(引自百度)

在对称加密算法中,数据发信方将明文(原始数据)和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。收信方收到密文后,若想解读原文,则需要使用加密用过的密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。在对称加密算法中,使用的密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密,这就要求解密方事先必须知道加密密钥。对称加密算法的特点是算法公开、计算量小、加密速度快、加密效率高。不足之处是,交易双方都使用同样钥匙,安全性得不到保证。此外,每对用户每次使用对称加密算法时,都需要使用其他人不知道的惟一钥匙,这会使得发收信双方所拥有的钥匙数量成几何级数增长,密钥管理成为用户的负担。对称加密算法在分布式网络系统上使用较为困难,主要是因为密钥管理困难,使用成本较高。在计算机专网系统中广泛使用的对称加密算法有DES、IDEA和AES。

我的看法:

看了上面的介绍,简单来说就是我生成一个密钥,然后用公开的一个加密算法对我要发送对方的明文进行加密,然后将密文和密钥发送给接收方,接收方取出密钥用公开的解密算法对密文进行解密。这个方式有以下优缺点:

优点:加密速度快、运行时占用资源少等特点

缺点:

     被拦截来如果有本事取出密钥,那么就可以解密数据。

     密钥每用一次都被抛弃,需要重复生成密钥。

非对称加密:(引自百度)

不对称加密算法使用两把完全不同但又是完全匹配的一对钥匙—公钥和私钥。在使用不对称加密算法加密文件时,只有使用匹配的一对公钥和私钥,才能完成对明文的加密和解密过程。加密明文时采用公钥加密,解密密文时使用私钥才能完成,而且发信方(加密者)知道收信方的公钥,只有收信方(解密者)才是唯一知道自己私钥的人。不对称加密算法的基本原理是,如果发信方想发送只有收信方才能解读的加密信息,发信方必须首先知道收信方的公钥,然后利用收信方的公钥来加密原文;收信方收到加密密文后,使用自己的私钥才能解密密文。显然,采用不对称加密算法,收发信双方在通信之前,收信方必须将自己早已随机生成的公钥送给发信方,而自己保留私钥。由于不对称算法拥有两个密钥,因而特别适用于分布式系统中的数据加密。广泛应用的不对称加密算法有RSA算法和美国国家标准局提出的DSA

 

我的看法:

假如我要和你合作,为了方便数据传送,我先用非对称加密技术生成一对密钥,一个叫公钥一个叫私钥(公钥加密的文件只有私钥才能解开,同样私钥加密的文件只有公钥才能解开),如果我把一个密钥给了(怎么给?qq,email,电话等)你,那么给你的那把密钥,对我来说就是你的公钥(因为我知道你的密钥,对我来说,我是公,你是私),对你自己来说就是你的私钥(除了我和你,没有第三个人知道)。

准备好了密钥,那么现在我要给你传送数据,我先用你的公钥加密数据,然后把密文发给你,你用你的私钥解密,这样就ok了。如果你要给我发文件,那么你得问我要公钥。

优点:安全性比对称加密要高,在加密数据传输过程中,不传输密钥,所以即使数据被中途拦截,黑客没有密钥也不无法解开数据.

        可以用于密钥交换

缺点:速度慢,加密后的密文较长

数字信封:(引自百度)

关于对称密码术和非对称密码术的讨论表明:前者具有加密速度快、运行时占用资源少等特点,后者可以用于密钥交换。一般来说,并不直接使用非对称加密算法加密明文,而仅用它保护实际加密明文的对称密钥,即所谓的数字信封(Digital Envelope)技术。举例说明,若A向B发送保密信息,具体步骤为:(如图7所示)
                       

  1)A生成一随机的对称密钥,即会话密钥。
  2)A用会话密钥加密明文。
  3)A用B的公钥加密会话密钥。
  4)A将密文及加密后的会话密钥传递给B。
  5)B使用自己的私钥解密会话密钥。
  6)B使用会话密钥解密密文,得到明文。

 

我的看法:

很明显,数字信封就是指结合对称加密和非对称加密的一个技术,综合了两种加密技术的优点而产生的。

消息摘要:(引自www)

消息摘要,又叫作Hash算法或散列算法,是一种将任意长度的输入浓缩成固定长度的字符串的算法,注意是“浓缩”而不是“压缩”,因为这个过程是不可逆的。它的特点是:
    1. 不同内容的文件生成的散列值一定不同;相同内容的文件生成的散列值一定相同。由于这个特性,摘要算法又被形象地称为文件的“数字指纹”。
    2. 不管文件多小(例如只有一个字节)或多大(例如几百GB),生成的散列值的长度都相同,而且一般都只有几十个字符。
这个神奇的算法被广泛应用于比较两个文件的内容是否相同——散列值相同,文件内容必然相同;散列值不同,文件内容必然不同。如果您用过BT或eMule,应该对散列值比较熟悉了,右图分别是BT和eMule的文件详细信息的截图。

细心的朋友可能已经注意到了,BT和eMule的散列值的长度不一样,这是因为它们所使用的摘要算法不同,目前比较流行的摘要算法主要有MD5和SHA-1,您可以在.Net的System.Security.Cryptography命名空间找到它们的身影。
另,由于本篇是只重理解和应用的白话文,所以上面对摘要算法的讨论并不十分全面严谨,喜欢看文言文的朋友可以看这篇《Hash 算法及其应用》。还有就是MD5和SHA-1算法已经从理论上被山东大学王小云教授及其研究小组破解(向中国的科学家致敬!),不过并不是这两个算法从此就不能用了。 

数字签名:(基于非对称加密的)

  数字签名不是一种用户对用户的保密方式,而是一种说明这个文件是我的,上面有我的签名这么一个思想 ,具体过程如下:

假如我要发布我的文件,我先对文件进行消息摘要生成散列值,再用非对称加密(我的私钥)对散列值进行加密,叫做散列值密文,用户想要下载我的文件,需要同时下载文件和散列值密文,下载完毕后,用户再用我发布的公钥对散列值进行解密,并且自己也生成一份这个文件的散列值,比对这个散列值是否相等,如果相等,那么可以确定2件事情:

   1、文件没有被修改过,保证了信息的完整性

   2、这个文件是我的(非对称加密的好处),就是文件进行了身份认证,做到了防止抵赖

基于MD5的网络传输签名:(平常我们都在用的)

       和数字签名类似,不过它只取数字签名的一个优点:文件没有被修改过,保证了信息的完整性。

       像支付宝等在线支付平台都在用这个方式,假如你想让一串明文提交的服务器,但有防止中途被修改。那么你可以先对你要发送给服务器的数据进行一次MD5摘要。假如这个摘要为sign,然后连同参数一起发送给服务器,服务器在收到请求后,将除了sign以为得参数再按照约定的格式也进行一次MD5,比对这个MD5值和sign是否相同就可以知道参数是否被修改过.

看完这些,是不是明白了一些道理呢?

原文地址:https://www.cnblogs.com/sunwei2012/p/1629748.html