MD5,Des,RSA加密解密

下面先熟悉几个概念

1>对称加密:加密的key和解密的key是同一个

但是如何确保密钥安全地进行传递?秘钥的安全是一个问题

2>非对称加密:加密点的key和解密的key不是同一个

非对称加密的接收者和发送者都持有两个密钥,一个是对外公开的,称为公钥,一个是自行保管的,称为私钥

非对称加密的规则是由某人A的公钥加密的消息,只能由A的私钥进行解密;由A的私钥加密的消息只能由A的公钥解密。

此时我们可以得出接收方、发送方有两个公钥两个私钥一共四个密钥,我们先看看两种简单的方式,这两种方式都是只使用两个密钥。

第一种模式只使用接收方的公钥和私钥,称为加密模式

在加密模式中,由消息的接收方发布公钥,持有私钥。比如发送方要发送消息“hello,jimmy”到接收方,它的步骤是:

1>发送方使用接收者的公钥进行加密消息,然后发送。

2>接收方使用自己的私钥对消息进行解密。

这种模式下,消息的发送方,不保证第三个无法获得,但保证第三方无法解密。

第二种模式,由消息发送方发布公钥,持有私钥,称为认证模式。

比如发送者要发送消息“hello,jimmy”到接收者,它的步骤是:

1>发送者使用自己的私钥对消息进行加密,然后发送。

2>接收者使用发送者的公钥对消息进行解密。

这种模式,能证明发送方就是消息的发送者,而不是其他人。

3>数字签名

不管是加密模式,还是认证模式,接收方都无法确认消息是否被改动过,此时数字签名就登场了。

数字签名实际上就是上面非对称加密时的认证模式,只不过做了一点点的改进,加入了散列算法。大家比较熟悉的散列算法可能就是MD5了。

散列算法那的3个特点:

1>不可逆,由结果无法推算出原数据

2>原数据有一点变化,散列值都产生巨大变化

3>无论多么大或者多么少数据,总会产生固定长度的散列值(常见的32位64位),产生的散列值通常称为消息的摘要(digest)

那么如何通过引入散列函数来保证数据的完整性呢?也就是接收方能够确认消息确实是由发送方发来的,而没有在中途被修改过。具看下图:

1>发送方->把消息进行散列运算->得到消息摘要

2>发送方->自己的私钥对摘要加密->发送给接受方

3>接收方->用发送方的公钥解密消息和摘要

4>接收方对消息进行散列运算,得到一个消息摘要

5>接收方把自己得到的摘要和发送方发来的摘要进行比对。相同说明消息没被改动过;不同,说民消息被改动过了。

4>高级模式

上面的数字签名,只对消息摘要进行了加密,而没有对消息本身进行加密。非对称加密是非常耗时的,只对消息摘要加密,减少运算量,提高程序执行速度。

但是它不能保证消息不被第三方截获,因为消息是明文传输,第三方能直接看到明文,为了解决这个问题,需要将非对称加密的认证模式,加密模式,消息摘要进行一个结合,我们称之为高级模式

我们将其分为发送方和接收方两部分来看。

先看发送方需要执行的步骤:

1>.将消息进行散列运算,得到消息摘要。

2>.使用自己的私钥对消息摘要加密(认证模式:确保了接收方能够确认自己)。

3>.使用接收方的公钥对消息进行加密(加密模式:确保了消息只能由期望的接收方解密)。
4>.发送消息和消息摘要。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/54726943738fdb5a40559b7b7c8cd618.html