非对称加密+数字签名+对称加密基本交互原理

主要内容:纯文字说明如何实现基于RSA+DES+数字签名实现的业务交互流程

说明 内容
A的私钥 A-PRIVATE-KEY
B的公钥 B-PUBLIC-KEY
B的私钥 B-PRIVATE-KEY
A的公钥 A-PUBLIC-KEY
发送内容 content "IloveU"
对称加密 encryptKey "2023pwd!@#"
对称加密算法 3DES
摘要算法 MD5
    A (Sender)                                      B (Receiver)
  
    1. Encrypt Content using 3DES                
    +---------------------+                  +---------------------+
    | 3DES                |                  |                     |
    | aes(content, encryptKey) -> 'U2FsdGVk...' |   MD5, 3DES, Key   |
    +---------------------+                  |                    |
                                            /  |                    |
    2. Generate MD5 Hash of Content        /   +---------------------+
  +---------------------+                 /
  |        MD5          |                /
  | md5(content) -> '91AFEAB3...'       /
  +---------------------+              /
                                      / 
    3. Sign MD5 Hash using A-PRIVATE-KEY 
+-----------------------+             /  
|     Digital Signature |           /    
| sign(md5(content)) -> 'ABC123'  /      
+-----------------------+         /        
                                  /         
  4. Encrypt Key Info using B-PUBLIC-KEY     
+------------------------+        \          
|    RSA Encryption      |         \          
| encrypt(3DES, MD5, Key) -> 'U2FsdGVk...'    
+------------------------+           \      
                                        \    
  Transmit Encrypted Data                 \   
  (Encrypt Content, Hash, Signature)       \  
  +-------------------------------------+    \ 
  | Encrypted Data                      |     \
  |    contentSummary: '91AFEAB3...'     |      \
  |    encryptContent: 'U2FsdGVk...'     |       \
  |    encryptKey: 'U2FsdGVk...'         |        \
  +-------------------------------------+         \
                                                    \
  
      
     a. Decrypt 'encryptKey' using B-PRIVATE-KEY
    +---------------------+
    |    RSA Decryption  |
    | decrypt(encryptKey) -> MD5, 3DES, 2023pwd!@#
    +---------------------+
   
    b. Decrypt 'encryptContent' using 3DES and Key
    +---------------------+
    |        3DES         |
    | decrypt(encryptContent, 3DES-Key) -> original content
    +---------------------+
   
    c. Decrypt 'contentSummary' using A-PUBLIC-KEY
    +---------------------+
    |    RSA Decryption  |
    | decrypt(contentSummary) -> '91AFEAB3...'
    +---------------------+
   
    d. Verify Content Summary
    +---------------------+
    |        MD5          |
    | md5(decryptContent) -> '91AFEAB3...'
    +---------------------+

第一步:
A用密钥encryptKey,对 发送内容content 用对称加密算法3DES对称加密aes(content,encryptKey),结果假定为"U2FsdGVkX1/t+ZN8kgO0ItmGoNfBuBHUPaVR3rSrSt4="

第二步:
A用md5对 content 生成摘要:md5(content),结果假为"91AFEAB3EC15EBC7F82DB66C6D443ACB"

第三步:
A用"A-PRIVATE-KEY",对摘要md5(content)的结果进行签名。

第四步:
A用B的公钥对第一步的随机密钥key加密,可附带说明对称加密算法为3DES,摘要算法为MD5。
A-PRIVATE-KEY(encryptKey,summaryAlgorithm,encryptAlgorithm)结果假定为:"U2FsdGVkX1+gTjW/2dQl1/8YD5Xl9w"

综上,A向B的放松内容为以下字段

array (
   //经过A签名的摘要(md5生成摘要后,对此摘要进行签名)
  'contentSummary' => '91AFEAB3EC15EBC7F82DB66C6D443ACB',
  //通过对称加密算法加密的原始数据(加密数据)
  'encryptContent' => 'U2FsdGVkX1/t+ZN8kgO0ItmGoNfBuBHUPaVR3rSrSt4=',
  //用B的公钥加密的摘要算法、对称加密算法,对称加密key三个字段
  'encryptKey' => 'U2FsdGVkX1+gTjW/2dQl1/8YD5Xl9w',
)
接收方 B 内容
加密内容: encryptContent U2FsdGVkX1/t+ZN8kgO0ItmGoNfBuBHUPaVR3rSrSt4=
加密key: encryptKey U2FsdGVkX1+gTjW/2dQl1/8YD5Xl9w
加密内容摘要: contentSummary 91AFEAB3EC15EBC7F82DB66C6D443ACB

第一步:
B用自己的私钥解密加密key字段“encryptKey”,得到摘要算法、对称加密算法、对称加密的key,对应的值为MD5,3DES,2023pwd!@#
第二步:
B对加密内容字段 "encryptContent”.利用第一步得到的结果3DES算法和对称加密的key进行数据解密,得到原始内容的明文。再次用第一步得到的md5摘要算法(无需key),重新生成生一份(明文)摘要留作备用。

第三步:
B用A的公钥解密A发送的 “加密内容摘要contentSummary”字段得到一份摘要的明文,与第二步的重新生成的摘要做对比。如果一致,代表通信数据未被篡改。且此时A不能抵赖,因为A用自己的私钥已经对摘要算法进行了签名。同时数据由于本身通过aes进行加解密,也保证了数据的保密性。

备注:CA证书注册,生成,验证等细节略过。

你可能感兴趣的:(rsa加密解密)