加解密与数据校验
一、加解密算法在网络通讯中的作用
a)使通讯信息不被第三方看到
报文加密:可采用DES或3DES算法
DES和3DES算法可逆,接收方可通过密钥将密文还原
以下是使用第三方提供的dll中的DES算法进行报文加密:
1 #include<iostream>
2 #include "des3.h"
3 #include "hmac_md5.h"
4 #pragma comment(lib,"KingstarEncrypt.lib")
5 usingnamespace std;
6
7 int main()
8 {
9 CTripleDES encrypt;
10 char charSource[]="abcd";
11 int datalen=4;
12 char key[]="12345678";
13
14 cout<<"使用DES算法进行报文加密...."<<endl<<endl;
15 cout<<"加密前明文为: "<<charSource<<endl;
16
17 datalen= encrypt.encryptchar(charSource, datalen, key);
18 cout<<"加密后的密文为:"<<charSource<<endl;
19
20 datalen = encrypt.decryptchar(charSource, datalen, key);
21 cout<<"解密后的明文为: "<<charSource<<endl<<endl;
22
23 return0;
24 }
运行结果如下:
b)接收方验证数据是否被篡改
数据校验:可采用hmac_md5算法
hmac_md5算法不可逆,用公开函数和双方共享的密钥产生一个固定长度的值作为验证标识(一般为32位字符串)
注:标准MD5加密无需密钥,此处是专门用于数据验证的特定MD5算法
以下是使用第三方提供的dll中的hmac_md5算法进行数据校验:
1 #include<iostream>
2 #include "des3.h"
3 #include "hmac_md5.h"
4 #pragma comment(lib,"KingstarEncrypt.lib")
5 usingnamespace std;
6
7 int main()
8 {
9 HMAC_MD5 hmac_md5;
10 char key[]="123456789012345678901234";
11 int keylen=24;
12 char charSource[]="abcd";
13 int datalen=24;
14 char macTmp[32+1];
15 char mac[32+1];
16
17 cout<<"使用HMAC_MD5算法进行数据校验...."<<endl<<endl;
18 cout<<"待校验的报文为:"<<charSource<<endl;
19
20 memset(macTmp,0,sizeof(macTmp));
21 hmac_md5.hmac_md5(key,keylen,charSource,datalen,macTmp,16);
22 hmac_md5.MD5_DecimalToHex(mac,macTmp,16);//将16位的数据校验码转换成32位
23
24 cout<<"生成的数据校验码为:"<<mac<<endl<<endl;
25
26 return0;
27 }
运行结果如下:
c)数字证书
主要在https协议通讯中使用
整个通讯结构如下:
SSL连接:ssl连接一旦建立,会自动同步两端的证书信息,交换各自的公钥等内容
银行根证书:用于验证银行发行的个人证书等证书的合法性
个人证书:主要保存个人信息、自己的公钥、加解密算法、签名算法、发行机构签名等
私钥文件: 私钥
注:Ukey实际就是保存了“个人证书”和“私钥文件”
详细参考:a)数字证书理论:http://blog.csdn.net/zhoujunyi/article/details/2071435
b)算法详解:http://www.cnblogs.com/chnking/archive/2007/09/02/879218.html
附:在进行了报文加密和数据校验后,最终发送到数据包为:
报文长度(4字节,不含本字段)|加密报文|数据校验码(32位)
二、公钥加密和私钥加密
a)公钥加密(不对称加密):公钥+私钥
接收方自定义"公钥"-"私钥"对
公钥——通讯双方均知道
私钥——只由接收方保存,并用该私钥对接收到的密文进行解密
b)私钥加密(对称加密):共享的私钥
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步