关闭

TCP通信中对消息进行加密(一)

标签: VC++TCP加密网络通信CryptAcquireContext
2266人阅读 评论(0) 收藏 举报
分类:

在网络通信中有时要对信息进行加密 ,可以直接用微软自带的CryptoAPI。加密方法大概可分为两种:

一 公钥加密技术:

   加密和解密使用不同的密钥,分为公钥和私钥,私钥是不能让别人看见的,而公钥可以公开,加密时用公钥进行加密,然后用公钥对应的私钥进行解密,公钥和私钥必须配对使用。这种技术安全性高,但效率低。

二 对称密钥加密技术

  这种加密技术当中,加密密钥和解密密钥都是同一个,所以密钥必须只能让加密双方知道,否则就不安全,但是这种加密技术效率高。、

三 结合上面两种技术

  用第一种加密技术加密对称加密的密钥,然后用对称加密技术加密通讯信息。

本章讲解的加密方法是第一种加密技术


首先在程序里面创建密钥器 使用函数 CryptAcquireContext 代码如下:

int	AcqFlgs[] = { 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




1
1
查看评论

加密的TCP通讯全过程

网上介绍c#加密解密的文章和代码都说的不太明白,现用最直白语言说一下首先3个概念,1、不可逆加密2、可逆对称加密3、可逆非对称加密1、不可逆加密,大家最熟悉的一种,md5 sha1就是,加密后就不能解密,只能用于存储密码和校验文件变动,不能用于网络通讯。2、可逆对称加密,用一个钥匙把内容加密,只要有...
  • laotse
  • laotse
  • 2010-09-27 20:02
  • 10266

基于DES加密的TCP聊天程序

近闻多大牛写博客已出书,虽才疏学浅,不求著书立说,但求面试官一问,答曰:吾于CSDN发表数篇博文,多热评,又选得《网络安全》一课,于图书馆觅得《网络安全高级软件编程技术》一书,兴趣饶然,乃写此文,有连载,期关注。
  • u014004264
  • u014004264
  • 2016-03-20 12:55
  • 1320

TCP传输中使用AES加密和gizp压缩

最近项目需求需要用到TCP传输,为了保证安全传输使用AES,为了使传输过程中减数据量小,使用gzip压缩,特此分享一哈。 一、AES加密 关于AES的资料网上很多,个人觉得《加密与解密(第三版)》很不错,这本书中P155开始讲AES 下载地址:http://download.csdn.net/de...
  • qiwenmingshiwo
  • qiwenmingshiwo
  • 2015-05-30 23:11
  • 3316

TCP通信中对消息进行加密(一)

在网络通信中有时要对信息进行加密 ,可以直接用微软自带的CryptoAPI。加密方法大概可分为两种: 一 公钥加密技术:    加密和解密使用不同的密钥,分为公钥和私钥,私钥是不能让别人看见的,而公钥可以公开,加密时用公钥进行加密,然后用公钥对应的私钥进行解密,公钥和私钥必须...
  • XIAIBIANCHENG
  • XIAIBIANCHENG
  • 2013-03-31 20:04
  • 2266

非对称TCP加密技术

  • 2015-10-11 20:48
  • 151KB
  • 下载

TCP/IP 是用于因特网 (Internet) 的通信协议

TCP/IP 是用于因特网 (Internet) 的通信协议。 计算机通信协议 计算机通信协议是对那些计算机必须遵守以便彼此通信的规则的描述。 什么是 TCP/IP? TCP/IP 是供已连接因特网的计算机进行通信的通信协议。 TCP/IP 指传输控制协议/网际协议 (Transmissio...
  • Tsingsn
  • Tsingsn
  • 2016-07-10 20:11
  • 1236

TCP协议与流通信

TCP协议与流通信   前言   刚说完了UDP协议,接下来咱们趁热打铁,顺道搞一下TCP协议,搞完了今天就不搞网络的东西了,搞点别的,       引入   TCP(Transporttat...
  • shanyongxu
  • shanyongxu
  • 2015-08-31 16:07
  • 1078

文件传输加密系统TCP

  • 2009-06-11 01:40
  • 523KB
  • 下载

基于网络传输的数据包的加密解密方法及终端

摘要 本申请公开了一种基于网络传输的数据包的加密解密方法及终端。采用基于流密码算法的端到端实时加密方法,通信双方在会话初始化阶段协商会话参数并分别建立密码表。发送方抽取数据包头信息产生密钥流起始点,根据密码表和起始点生成一段密钥流异或加密数据包载荷。接收方根据数据包包头信息判断是否存在网络丢包...
  • dongwenkai365506
  • dongwenkai365506
  • 2015-11-28 13:20
  • 1545

哈希,编码, 加密的区别!

本文来聊聊哈希,编码, 加密的区别。 哈希, 如md5sum, 为了获取映射摘要。 不考虑碰撞的话, 可以理解为一一映射, 但不可逆。 编码, 如base64, 为了形式变化, 有时可以便于传输和识别。 一一映射, 可逆。 加密, 如DES/RS...
  • stpeace
  • stpeace
  • 2017-06-17 19:11
  • 2410
    个人资料
    • 访问:58205次
    • 积分:949
    • 等级:
    • 排名:千里之外
    • 原创:32篇
    • 转载:0篇
    • 译文:0篇
    • 评论:24条
    文章分类
    最新评论