如何解决这个问题,请高手支招,在线等.....

edit89 2014-10-17 02:01:12
在为网络通讯中,使用send(socket s, char *buf,int len,0)传输数据
在该函数中,不管buf中数据的具体情况,len长度的数据都被传输,这样保证了任意数据都能在网上传输(即便是buf中某个位置出现了字符串结束符\0,后面的数据也能被传输)但在数据处理过程中,如果发生buf调用,则\0之后的数据都被截断,于是出现以下问题:
假设从X文件中读取一段数据,保存在char *a1中,之后调用某个DLL中的函数f(x)对a1进行加密(假设是等长度加密),加密结果(a2)很可能在中间有\0,于是从DLL返回的数据a2的长度有可能小于a1,再使用send发送a2,只能发送一部分数据,造成接收端解密失败!

目前能想到的办法是将a2转移到业务处理模块中,这样,即使a2中有\0,也能全部发送,但加密算法泄露了!否则,只能对从文件中提取的数据不加密。问题:如何将从任意文件中读取的数据,使用DLL中的函数进行加密,加密结果不管是否包含\0,都返回到调用函数中?

...全文
222 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
笨笨仔 2014-10-17
  • 打赏
  • 举报
回复
引用 6 楼 edit89 的回复:
wxhxj0268 -------------- DLL中加密函数a2全部为零的结果如何返回?
怎么越看越糊涂,你到底要发送什么?一个发送程序它的作用就是忠实的发送,不管进来的数据类型如何,都能在不丢失任何信息的前提下完成发送,否则,你的发送程序就没有写好,或者说它存在缺陷。 如果将发送数据做成一个函数,那么这个函数它就是一个黑盒,函数内部应该完成所有的数据转换与处理,再完整的将数据发出去同样,接收端能完整的逆向还原收到的数据。
edit89 2014-10-17
  • 打赏
  • 举报
回复
send发送的是二进制数据,哪儿来的\0 ---------------------------------------------------- send中的char *buf,来自于任何类型的文件,再进行异或操作后,某些位置会出现连续8个00000000,这就是我说的\0,对于send来说,没问题,但这个字符串如果要赋值给其他数据,你说会怎样?
edit89 2014-10-17
  • 打赏
  • 举报
回复
wxhxj0268 -------------- DLL中加密函数a2全部为零的结果如何返回?
edit89 2014-10-17
  • 打赏
  • 举报
回复
这样说的话:不但输出参数不能使用字符串函数,而且参入参数也不能使用字符串函数,在a2的内部也不能使用字符串函数,加密操作需要进行大量的异或和字符串操作,要重新设计一套自己的函数?如此,对已简单的加密操作,代价是不是有点大?
赵4老师 2014-10-17
  • 打赏
  • 举报
回复
不知道有多少前人掉在TCP Socket send(人多)send(病少)send(财富) recv(人多病)recv(少财富) 陷阱里面啊! http://bbs.csdn.net/topics/380167545
lx624909677 2014-10-17
  • 打赏
  • 举报
回复
send发送的是二进制数据,哪儿来的\0
笨笨仔 2014-10-17
  • 打赏
  • 举报
回复
怎么做的?\0截断是对字符串而言的,对二进制来说所有数据都有效,只要指定长度即可,全部为0也不会错。看来程序的其它部分有问题。不会把发送缓冲与处理缓冲共用吧?
shenyi0106 2014-10-17
  • 打赏
  • 举报
回复
1. 遇\0结束的那是字符串,只要不用字符串相关的函数,就没有任何问题。 2. 可以给你的接口函数设计一个“输出参数”,用来接收编码后的数据。

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧