加密验签

1.加验签

加签:发送消息方,对消息加签名;

验签:接受消息方,验证签名是否正确。

2.为什么加验签

验证消息的完整性,确认发送方身份;

3.原理

3.1公钥加密 

假设一下,我找了1和2这两个数字,将2这个数字保留起来(不告诉你们(私钥)),告诉大家1是我的公钥。

我的一个朋友要给我传文件,不能让别人看,就用1(我告诉朋友1是我的公钥)加密了。别人找到了这个文件,但是他不知道2就是解密的私钥啊,所以他解不开,只有我可以用
数字2,就是我的私钥,来解密。这样我就可以保护数据了。

我的好朋友x用我的公钥1加密了字符a,加密后成了b,放在网上。别人偷到了这个文件,但是别人解不开,因为别人不知道2就是我的私钥,
只有我才能解密,解密后就得到a。这样,我们就可以传送加密的数据了。

3.2私钥签名
如果我用私钥加密一段数据(当然只有我可以用私钥加密,因为只有我知道2是我的私钥),结果所有的人都看到我的内容了,因为他们都知
道我的公钥是1,那么这种加密有什么用处呢?

但是我的好朋友x说有人冒充我给他发信。怎么办呢?我把我要发的信,内容是c,用我的私钥2,加密,加密后的内容是d,发给x,再告诉他
解密看是不是c。他用我的公钥1解密,发现果然是c。
这个时候,他会想到,能够用我的公钥解密的数据,必然是用我的私钥加的密。只有我知道我得私钥,因此他就可以确认确实是我发的东西。
这样我们就能确认发送方身份了。这个过程叫做数字签名。当然具体的过程要稍微复杂一些。用私钥来加密数据,用途就是数字签名

 

总结:公钥和私钥是成对的,它们互相解密。

公钥加密,私钥解密。

私钥数字签名,公钥验证。



4.RSA算法

RSA 公钥加密算法是1977年由Ron Rivest、Adi Shamirh和LenAdleman在(美国麻省理工学院)开发的。RSA取名来自开发他们三者的名字。RSA是目前最有影响力的公钥加密算法,它能够 抵抗到目前为止已知的所有密码攻击,已被ISO推荐为公钥数据加密标准。RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对 其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。


RSA加密验签是对安全性要求比较高的机构间通信常用的方式,密钥足够长的情况下,当前的计算能力还不足以解密(不过量子计算机...未来谁知道呢!)。然而,我发现还是有人对这种过程一知半解。比如你们的加签算法用的什么?回答RSA......比如有些机构会对生成的密钥对再用Base64进行编码,这样使用的时候就需要对应的解码,这个过程都被封装在工具类里面了,所以大家看代码的时候尽量多进去看看源码。RSA只是一个加密的算法,加签需要先对内容进行HASH然后再加密,比如SHA1WithRSA就是一个常用的RSA加签算法。

       网上很多讲解RSA的文章,本文就不说了,JDK自带了对应的算法。

       RSA加签、加密后的报文为什么是安全的?

       A机构生成A的密钥对,把公钥给到B;同样的,B把自己的公钥给A。这样A在生成加密报文的时候,会用B的公钥加密明文,然后用A的私钥对明文进行加签。OK,此时只有B的私钥才能解密报文,而私钥只有B才有,即使报文被截获,第三方也无法解密。如果A的公钥是公开的(实际上可能也不公开),那么第三方能解析出报文的HASH结果,也只是Hash结果...无法获得明文。B接受到请求后,用自己的私钥解密报文,然后对报文进行验签,如果不一致,那么也不会响应请求,这样的模式,通信过程的安全性就可以得到保障了。具体过程如下图所示:





5.加解密方案

互联网中,在与外界进行通讯的时候,通常需要加密验签,一般加密验签是为了保证数据的完整性、保密性以及不可否认性(身份识别),这里提供一种比较全面的加密方案:

这里假设明文数据为data,那么加密的过程为:

  1. 对data做单向加密(md5),生成签名摘要s=sign(data);
  2. 用发送方的私钥对s加密,加密后s1=SenderPrivateKey(s),SenderPrivateKey:发送方私钥加密函数;
  3. 对data和s1用对称加密生成data2=Encrypt(data,s1,key),其中Encrypt是对称加密函数,key是对称加密密钥;
  4. 对data2和key使用接受方的公钥加密,data3=ReciverPublicKey(data2,key),其中ReciverPublicKey是接收方的公钥加密函数。

data3就是接受方收到的数据,接收方收到数据后需要先做如下验证处理:

  • 接收方先用自己的私钥对接收到的数据进行解密,得到密码和加密的数据;
  • 使用密码对加密数据解密,得到加密的特征码和数据;
  • 用发送方的公钥解密特征码,如果能解密,则说明该数据是由发送方所发;反之则不是,这便实现了身份验证;
  • 最后计算数据的特征码和解密出来的特征码做对比,如果一样,则该数据没有被修改;反之则数据被修改过了。
5.2对称加密算法DES,3DES

6.加验签
签名使用的算法SHA1withRSA,进行数字签名可以防止第三方假冒企业的行为





猜你喜欢

转载自blog.csdn.net/cpp1781089410/article/details/78517249
今日推荐