一、名词介绍
1)加密:
是以某种特殊的算法改变原有的信息数据,以另外一种形式呈现,这里有几个名词:
加密之前的信息数 据可以理解为原数据,
原文;加密之后的数据信息可以被理解为密文,一般的呈现格式为一串字符,从字 符上来看,没有什么规律!
2)解密: 由加密后得到的密文,通过解密算法,解密以后,可以得到未曾加密之前的原信息数据,原文,被称之 为解密
二、
加密的分类
1)不可逆加密 不可逆,不可逆,就是指不能不能返回,就是原信息数据,通过加密后得到的密文数据信息,不存在算 法,让密文变回来,不能变回原文信息; 经常以MD5 hash散列计算为代表;
2)可逆加密 可逆,可逆,就是指原信息数据,通过加密算法,加密后,得到的密文数据信息,存在一种解密算法, 可以让密文解密后得到原文信息
三、不可逆加密MD5 MD5加密,就是典型的不可逆的加密,因为他只能从数据信息通过加密后得到密文信息,而不能从密文 再通过计算得到原文;
1) 规则: 1.MD5公开的算法,hash散列计算; 任何语言实现后其实都一样,通用的,无论是C#,java....各种语言 的实现都一样的。本质是通过hash散列计算,可以对普通的数据信息进行加密,也可以对文件生成文件的 摘要。
2.相同原数据信息加密的结果是一样的
3.不同长度的内容加密后加过都是32位
4.原文差别很小,结果差别很大
5.不管文件多大,都能产生32位长度摘要
6.文件内容有一点改动,结果变化非常大
7.文件内容不变,名字变了,结果是不变
2) 作用:
a).防篡改 发个文档,事先给别人一个MD5,是文档的摘要,源代码管理器svn--即使电脑断网了,文件有任何改动 都能被发现--本地存了一个文件的MD5--文件有更新,就再对比下MD5,极速秒传--扫描文件的MD5--跟 已有的文件MD5比对--吻合表示文件已存在不用再上传
b).密码保存,防止看到明文 不可逆 密码应该只有用户知道----数据库不能存明文---但是又需要验证,MD5加密下原始密码---数据库存密文--- 下次登录把密码MD5后再比对,密文是可见的,所以要求密码不能太简单,)
c).防止抵赖 防止抵赖,数字签名,把一些内容摘要一下,由权威的第三方去保障,将来这个文件就是你做的,不能抵 赖
3) MD5的争议 实质上,MD5 只是一种哈希算法。哈希算法,又叫散列算法,是一类把任意数据转换为定长(或限制长 度)数据的算法统称。可以把数据计算后得到一个hash散列值,不能计算得到原数据。 部分人认为Md5不算是加密算法,他们认为加密就要对应一个解密,可以把原文加密成密文,也能从密 文解密到原文,这才算加密。也有部分人认为这个为不可逆加密,这里Richard不过过多的点评!
四、对称可逆加密Des
1)规则:
1.对称可逆加密,有一组加密解密算法,成套的,且算法是公开的,不同编程语言的应用也是相同的。 算法公开,你知道,我也知道,大家都知道。
2.有一组加密解密Key--秘钥,且秘钥是完全相同的,加密和解密均需要使用秘钥,因为秘钥相同。 也就说说解密和解密都需要使用同一个秘钥。知道加密解密算法,无法推导出密钥的;
3.加密使用的秘钥,在解密的时候,也必须使用这个秘钥才能解开;
2)特点:
1.原文长---加密后--密文也长,原文短---加密后---密文也相对要短一些
2.加密解密速度超快
3.容易泄露秘钥,因为秘钥是一样的,安全性不是最高,相比于非对称可逆加密而言;
3)作用:
1.互联网传输加密数据信息
2.防止抵赖
3.Jwt鉴权授权
五、非对称可逆加密Rsa
1)规则:
1.非对称可逆加密:有一套公开的加密解密算法,公开的,大家都知道;
2.同时有一组加密解密Key,这组Key是成套的,且两个Key不一样;无法通过加密算法推导出这一组 key;且具有私有key和共有key之分,私有key就是只有自己知道的,私有化的;可以加密也可以解密; 共有key,是公开的,所有人都可以知道。 注意:在其他 的有些实现中,是私有key加密,公有key解密,这个是为了能够做签名;在C#中的实现, 提供的Api是公有key加密,只能由私有key解密; 关于签名这个有另外的api支持.
2)特点:
1.原文短---加密后---密文长
2.加密速度相对要慢
3.安全性超强---成套的加密解密key不一样
3)作用
1.数据的安全传输
2.直接支持的加密解密api,还无法完成签名; 签名:实际在数字签名的时候,是需要私有key加密,共有key解密的; 签名:私钥加密----公钥解密
4)Rsa验证签名
1.私钥签名
2.公钥验签
番外篇:
非对称可逆加密: rsa dsa ecdsa
六、数字签名和数字证书
1)签名 历史中的通信,都是通过书信来传递信息,那么在写信的时候,除了写信件的正文,在信件的最后,需 要有一个写信人的亲笔签名,这就标注,这封信件是来自于谁的,谁写出的这封信。也可以通过字迹来 辨别真伪。如果有人冒充,可以通过字迹来辨别,那么这个亲笔签名就有很大的作用了。 现在传输信息是互联网传输信息,那么在传输的过程中,也需要明确指定这个信息是哪儿传来的,那么 就需要明确的签名来指定是谁发的。网络传输是很不安全的,如果直接传输数据,数据信息有可能会被 篡改。那怎么做呢?请看下图: 注意:其他支持:私有key加密+公有key解密 场景:小明给小红传输信息: 服务器和客户端之间的数据传输 小明发送准备: 第一步:小明把文件信息,通过MD5加密(哈希运算)得到一个MD5密文。 第二步:小明在本地通过Rsa生成一组加密解密key(非对称加密)。 第三步:使用这组Rsa的加密key加密MD5密文,得到的内容就是签名 第四步:小明把签名+需要传输的文件数据+本地生成的解密key打包到一起,发送到互联网传输----传递 给小红。 小红收道消息: 第一步:使用公钥解密签名,如果正常解密,就可以得到小明发送过来的文件信息中的MD5密文。 第二步:使用MD5(哈希计算)把传过来的文件信息MD5加密,就可以得到文件信息的MD5密文。 现在就有一个是通过解密得到的文件信息的MD5密文,一个是通过文件信息MD5后的密文。 第三步:比对这两个MD5密文,如果密文完全一样,说明,传输过来的文件信息是没有被篡改过,如果 篡改过,MD5后的文件信息,是不能等于解密后的MD5数据的。 私有key加密+公有key解密 问题:.其实以上只能保证文件数据没有被篡改过。 2.不能保证小红收到的消息一定是来自于小明,虽然签名上写的是小明,但是这个东西是有可能伪造 的。 就类似于,你收到一封信,信件末尾的签名写的是小明,其实这封信是有可能是其他人来伪造的。 那么在数字签名中,也存在这样的一个问题,因为接受到的消息中的公钥是发送者提供的,如果其他 人,发送了一条消息给小红,同时在发送的时候,签名说是小明发的,在小红那里按照以上规则也可以 成功的。但是这个时候,这里已经被他人顶替了。 所以以上的签名:只能保证消息在传输的过程中,不被篡改,并不能完全保证这个文件数据是一定来自 于谁。 为了更加安全,不被冒充,所以就需要证明这个发送者的身份。怎么证明呢?请往下看。数字证书!
CA
CA是内置在浏览器中的不能被篡改的