TCP通信中对消息进行加密(一)
来源:互联网 发布:执业药师网络报名机构 编辑:程序博客网 时间:2024/06/06 16:42
在网络通信中有时要对信息进行加密 ,可以直接用微软自带的CryptoAPI。加密方法大概可分为两种:
一 公钥加密技术:
加密和解密使用不同的密钥,分为公钥和私钥,私钥是不能让别人看见的,而公钥可以公开,加密时用公钥进行加密,然后用公钥对应的私钥进行解密,公钥和私钥必须配对使用。这种技术安全性高,但效率低。
二 对称密钥加密技术
这种加密技术当中,加密密钥和解密密钥都是同一个,所以密钥必须只能让加密双方知道,否则就不安全,但是这种加密技术效率高。、
三 结合上面两种技术
用第一种加密技术加密对称加密的密钥,然后用对称加密技术加密通讯信息。
本章讲解的加密方法是第一种加密技术
首先在程序里面创建密钥器 使用函数 CryptAcquireContext 代码如下:
intAcqFlgs[] = { CRYPT_MACHINE_KEYSET, 0, CRYPT_NEWKEYSET|CRYPT_MACHINE_KEYSET, CRYPT_NEWKEYSET, -1 };wsprintf(contName, "mytest.rsa%d.%s", keyBits,"Administrator");hCsp=NULL;for(int i=0;AcqFlgs[i]!=-1;i++){hCsp=NULL;// 指向密钥容器的指针if(CryptAcquireContext(&hCsp,contName,cspName,PROV_RSA_FULL,AcqFlgs[i]))//第二个参数是密钥容器的名称,第三个是密钥容器版本,可以为空,真阳就取默认值,第4个参数是密钥容器类型,不同的类型,支持不同的加密算法break;}然后创建密钥 用CryptGenKey 低吗如下:
CryptGenKey(hCsp,CALG_RSA_KEYX,(keyBits<<16)|CRYPT_EXPORTABLE,&hPrivKey)最后导出公钥块,将公钥块发送到客户端 客户端导入公钥块 就可获得公钥,然后加密信息 代码如下:
CryptExportKey(hPrivKey,0,PUBLICKEYBLOB,0,pubKeyBlob,(DWORD*)&pubKeyBlobLen)客户端加密过程如下:
CryptImportKey(target_csp, severKeyBlob, length-2, 0, 0, &hExKey);//导入服务器端的公钥块 生成公钥BYTE message[1024]="Hello Server";len=strlen((char*)message);CryptEncrypt(hExKey, 0, TRUE, 0, message, (DWORD *)&len, MAXBUF);//用此公钥对数据进行加密memset(tempBuf,0,sizeof(tempBuf));sprintf(tempBuf,"%d%s",SENDMESSAGE,":");memcpy(tempBuf+2,message,len);send(clientSocket,tempBuf,len+2,0);
服务器端解密过程如下:
BYTE *tempByte=new BYTE[1024];memcpy(tempByte,buf+2,lenght-2);len=lenght-2;//加密数据的长度 很重要必须准确CryptDecrypt(priKey.hKey, 0, TRUE, 0, tempByte, (DWORD *)&len);//用私钥进行解密tempByte[len]=0;printf("%s",(char*)tempByte);delete []tempByte;示例程序下载地方
http://download.csdn.net/detail/xiaibiancheng/5206839
- TCP通信中对消息进行加密(一)
- TCP通信中对SIGPIPE的处理
- socket通信, 什么时候需要对数据进行加密呢
- 对数据库中存储过程进行加密
- PHP中对用户密码进行加密
- java中对数据进行MD5加密
- SpringBoot中加密包对配置文件中的密码进行加密
- vb socket通信(TCP/UDP)一对一、多对一
- 对配置文件进行加密
- 对文件进行加密
- 对数据进行加密
- 对apk进行加密
- Symbian中使用TCP/IP协议进行通信
- Java 中根据 TCP 协议进行网络通信
- 应用huffman进行通信加密
- TCP通信(一)
- TCP通信过程(一)
- 接口加密《一》:移动应用中,通过在客户端对访问的url进行加密处理来保护服务器上的数据
- php 分页
- 创业总结:创业公司怎样留人
- 十大【C语言】经典书籍,应该有你看过的吧
- java 环境变量设置
- 织梦DEDE的列表页
- TCP通信中对消息进行加密(一)
- IOS学习之UITableView表视图控件初步
- hibernate中如何替换slf4j为log4j
- 考试的感想
- This template requires a more recent version of the Android Eclipse plugin. Please update from versi
- windows进程间通信
- java 简单代码 运行
- C++ 遇到error LNK2019: unresolved external symbol "public: void __thisca的问题
- 第三次上机试验任务