天天看点

加密解密与加签验签

定义:

首先明确一个概念,公钥和私钥配对的,用公钥加密的文件,只有对应的私钥才能解密。当然也可以反过来,用私钥加密,用对应的公钥进行解密。

加密:发送方利用接收方的公钥对要发送的明文进行加密。

解密:接受方利用自己的私钥对加密文件进行解密。

加签验签开始前,收发双方会提前交换彼此公钥。

加签:发送方用一个哈希函数从报文文本中生成报文摘要(一般使用MD5算法:不可逆的加密算法),然后用自己的私人密钥对这个摘要进行加密,得到的就是这个报文对应的数字签名。通常来说,发送方会把数字签名和报文原文一并发送给接受者。

一般用到的算法如RSA(非对称加密算法/数字签名算法,这种加密算法的特点主要是密钥的变化,DES只有一个密钥。相当于只有一把钥匙,如果这把钥匙丢了,数据也就不安全了)

验签:接收方得到原始报文和数字签名后,用同一个哈希函数从报文中生成摘要A,另外,用发送方提供的公钥对数字签名进行解密,得到摘要B,对比A和B是否相同,就可以得知报文有没有被篡改过。

数字签名的作用:

一是能确定消息确实是由发送方签名并发出来的,也就是验证发送的源头,因为别人假冒不了发送方的签名。

二是数字签名能确定消息的完整性,也就是防篡改。

存在的问题及解决方案(数字信封):

很容易看得出来,数字签名技术有一个问题,就是原始报文是明文传输的,这对一些敏感内容来说通常是不合适的,所以有些时候,这两种技术会结合起来使用。

发送方用自己的私钥完成数字签名,然后再用接收方的公钥对报文进行加密,将数字签名和报文传送给接收方。

接收方在拿到密文和数字签名后,先用自己的私钥对密文进行解密,得到明文,然后再用发送方提供的公钥进行验签,确保发送方身份的准确性,以及报文并没有被篡改过。

大致流程:

一、发送方(RSAwithSHA、RSAwithMD5):

1.对传输的报文进行摘要,主要的算法有MD5和SHA

2.对摘要用自己的私钥进行加密生成签名,一般用到的算法如RSA(非对称加密算法/数字签名算法,这种加密算法的特点主要是密钥的变化,DES只有一个密钥。相当于只有一把钥匙,如果这把钥匙丢了,数据也就不安全了)

3.传输报文及签名

二、接收方:

1.对接收到的报文用同样的算法进行摘要

2.用发送方的公钥对发送方的签名进行解密得到发送方的摘要

3.对比两份摘要看是否有不同以验证是否被篡改

补充AC业务中的加验签

在国际超网中,公私钥主要用来做加验签。

clientId是不同站点网关系统间进行通信的身份标识,如在EZ-Link与GN通信时,双方约定使用305XST7YSG0QCJ03263此clientId进行通信,则在双发收发的请求和响应报文头中clientId都为305XST7YSG0QCJ03263。

两个站点准备互相通信前,会分别生成一对公私钥,然后交换彼此的公钥,并把自己的公私钥和对方公钥与clientId建立关联。

一个站点给给对方发送请求或返回响应时,会使用clientId上绑定的己方私钥对报文内容(GN标准中还包含发送地址URL)进行加签,并将得到的签名信息放入报文头中。

另一个站点接收到请求后,会使用clientId上绑定的对方公钥对签名进行解密,然后对比解密出的明文与报文内容是否一致,一致时说明此报文未被篡改。

继续阅读