赞
踩
举个简单的例子:
- 码表:
- 原始字符:ABCDEFGHIJKLMNOPQRSTUVWXYZ
- 密码字符:BCDEFGHIJKLMNOPQRSTUVWXYZA
-
- 原始书信:how are you
- 加密书信:ipx bsf zpv
- 解读后: how are you
加密算法:替换⽂字
密钥:替换的码表
以上的例子就是最简单的对称加密的实现。
DES(56 位密钥,密钥太短⽽逐渐被弃⽤)、AES(128 位、192 位、256 位密钥,现在最流⾏)
当然还有其他的算法,但这2种贵在金典。。
加密通信,防⽌信息在不安全⽹络上被截获后,信息被⼈读取或篡改。
图 2-1
举个简单的例子(不用深究,但是足以体现非对称加密的最核心的原理,运用各种移位、溢出等算法):假如你遇到危险,这时候要发送个110求救,以防被截获咱们得给它加密一下
- 原数据是: 110
- 加密 +4
- 通过加密秘钥后: 554
- 解密 +6和移位等
- 11 11 10
- 通过解密秘钥后: 1 1 0
进行网络通信,非对称加密是怎么做到可以在不安全的网络环境下进行安全的通信的呢
图 2-2
通信双方把加密秘钥给对方,然后双方怎么通信呢?图2-3中A通过B的加密秘钥加密数据后发给B,B就可以用B的机密秘钥进行解密,这样就实现的通信了。
那像C也是可以获取到A、B的机密秘钥的,但是C没有A、B的解密秘钥,所以即使C获取的到秘文,也无法进行解密。但是C在拥有A/B的加密秘钥,那C不就可以冒充A、B进行传数据了吗,那要怎么保证传数据的那一方是实际数据来源方呢?在后面我们会进行讲解,继续往下
图 2-3
图 2-4
图2-3和图2-4是一样的,从公钥的命名也可以知,公钥是可以公开的,但是私钥是一定要握在自己手上。很多时候公钥是可以通过私钥计算出来的,用的是椭圆曲线算法,比特币用的一种算法,所以如果拿到了私钥就等于同时拿到了公钥,可见私钥不能公开的必要性。
公钥能不能解私钥?
答案是能,可互相解
由于私钥和公钥互相可解,因此⾮对称加密还可以应⽤于数字签名技术。即用来证明发信息者的身份
图 2-5
如图2-5原数据通过私钥加密后(签名),生成签名数据,那对方就可以通过对应的公钥进行解密(验证)。由于别人没有我的私钥,就无法造出我的数据,也就无法冒充我了
图2-6
图2-6是比较标准的签名流程,会把原数据一起发送,这个是主要是为了验证方便
在实际的使用过程,常会对原数据hash以后对hash签名,然后附加在原数据的后⾯作为签名。这是为了让数据更⼩。
RSA(可⽤于加密和签名)、DSA(仅⽤于签名,但速度更快)
常会对原数据hash以后对hash签名,然后附加在原数据的后⾯作为签名。这是为了让数据更⼩。
相当于从数据中提出摘要信息,因此最主要⽤途是数字指纹。
从⽹络上下载⽂件后,通过⽐对⽂件的Hash值(例如MD5、SHA1),可以确认下载的⽂件是否有损坏。如果下载的⽂件Hash值和⽂件提供⽅给出的Hash值⼀致,则证明下载的⽂件是完好⽆损的。
如JAVA中验证,要重写hashCode()
当重要数据必须暴露的时候,有事可以选择暴露它的Hash值(例如MD5),以保障原数据的安全。
例如⽹站登录时,可以只保存⽤户密码的Hash值,在每次登录验证时只需要将输⼊的密码的Hash值和数据库中保存的Hash值作⽐对就好,⽹站⽆需知道⽤户的密码。这样,当⽹站数据失窃时,⽤户不会因为⾃⼰的密码被盗导致其他⽹站的安全也受到威胁。
加盐:由于彩虹表的存在,存储了很多常用密码对应的Hash值,这样就相当于破解了hash加密过的值,这时候加上一些自己特有的值一起hash,这样值就和直接Hash的值就不同了。
HashMap
MD5、SHA1、SHA256
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。