主要内容:纯文字说明如何实现基于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证书注册,生成,验证等细节略过。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。