加解密与数据校验

一、加解密算法在网络通讯中的作用

   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)私钥加密(对称加密):共享的私钥

                              

   

posted @ 2011-08-04 22:29  edisonfeng  阅读(1409)  评论(0编辑  收藏  举报