首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

文件加密怎么保证其完整性

2012-04-09 
文件加密如何保证其完整性hFile : CreateFile(Pchar(fileName), GENERIC_READ or GENERIC_WRITE, 0, nil,

文件加密如何保证其完整性
hFile := CreateFile(Pchar(fileName), GENERIC_READ or GENERIC_WRITE, 0, nil, OPEN_EXISTING,
  FILE_ATTRIBUTE_Normal, 0);
  if hFile <> INVALID_HANDLE_VALUE then //非法句柄
  begin
size := GetFileSize(hFile, nil);
  SetFilePointer(hFile, 0, nil, FILE_BEGIN);
  ReadFile(hFile, buf, size,nil);
...
...
... 字符转换
WriteFile(hFile, buf,Size, nil);
SetFilePointer(hFile, 0, nil, FILE_END);
// 字符转换完成后,在文件后面增加6位密钥
  WriteFile(hFile, my_key, 6, readSize, nil);
  SetEndOfFile(hFile);
  end;
CloseHandle(hFile);


过程大概如上,给一个文件转换后,在增加6位转换密钥,现在发现转换过程中有个问题,有时候会出现转换完成了,但是密钥加不上去的情况,也就是说,好像有时候前面加密了,但密钥没加上去,有时候密钥上去了,但前面没加密,请教,如何保证其过程的完整性?

[解决办法]
我想这更是一个你找你程序bug的过程,没有什么统一的规则能让你自动实现这个

[解决办法]
首先,这不是排他式的打开,你别的线程打开真失败了?你检查是否失败没有?如果失败了你做什么处理了。

所谓的“无法访问”也是你程序控制的,不会自动让其他线程等着你这个线程处理。而且,如果你各个线程分别处理一部分,你怎么把各个线程的结果整合起来也是问题。

我觉得你应该确保只有一个线程处理一个文件,而不是多个线程都尝试操作一个



[解决办法]
CreateFile如果不指定SHARE_READ之类的共享标志的话,文件是不能被再次打开的,不过你要注意打开的文件不是属于哪个线程,而是隶属于你的进程。同一个程序里可以传递那个文件句柄,所以访问时要注意顺序。最好用Mutex什么的控制一下互斥。
[解决办法]
改用FILE *f=_fsopen(Pchar(fileName),"rb",_SH_DENYRW);试试

热点排行