阅读:2379回复:8
关于文件的加密问题,(动态和静态的结合)
比如对doc文件先进行静态加密(像winzip的操作),再读的时候动态解密,就是截取mj_read然后进行解密,居然不行!doc文件以损坏。
问题就是,window2000的文件是不是将文件的格式数据(比如,大小,文件名等)和存储的数据(比如word打开的数据)存储在一起,而上面的操作加密的时候将格式数据给加密的,而解密的时候却没有解密? 如果是这样的问题的话应该如何解决? |
|
|
沙发#
发布于:2003-03-21 13:15
不会不行呀!!!!
我前产品就是这样的。 我认为你的错误点(推测):你用的加密算法身上,一般国际标准算法有,在加密是按组的加密的,解密一定要整个组才能解密,取其中一部分是不可能解密的。 检测方法:先加算法改为最简单的xor,到运行你的filter,如果不行,那就是你的filter的IRP_MJ_READ处理有误,如果就是在算法的分组对齐上。 你是不是也在写加密产品? |
|
板凳#
发布于:2003-03-21 16:46
vcmfc: 我现在用(9x)xor,通过了!但用rc2加密,算法是分组的!分组算法的问题?如何解决呢? :(
|
|
|
地板#
发布于:2003-03-21 18:53
处理分组呀!!!!
当用户读数据时,你要得到偏移量,再计算分组的偏移量,如果不是,自已读,再解密,再将数据计算后,copy,再计算偏移量,移到正确的地方,返回,OK。(如果用Zw函数,可能会简单些,不过也是很烦麻的。) 写数据也是。 |
|
地下室#
发布于:2003-03-21 20:11
不会不行呀!!!! 对啊,我现在是试验阶段,只是简单的把每个字节取反,解密的时候也是把每个字节取反? 这样不行吗? 对doc文件进行加密的时候是不是在最后tmp文件rename的时候,将doc文件加密,也等于是静态加密,不知道这样做行不行? 而read时候只对read*进行操作! |
|
|
5楼#
发布于:2003-03-21 21:38
ULONG
CryptData( PVOID inbuffer, ULONG inlength ) { BYTE *in=(BYTE *)inbuffer; ULONG i; for(i=0;i<inlength;i++) { *in=~(*in); in++; } return inlength; } 这是我加解密的函数,inbuffer为得到的数据缓冲区, length,read的时候为length=myIrpSp->Parameters.Read.Length write的时候为length=myIrpSp->Parameters.Write.Length。 有没有问题? |
|
|
6楼#
发布于:2003-03-21 22:39
错:
length,read的时候为length=myIrpSp->Parameters.Read.Length Read: 将操作传给file system后,再crypt length应为Irp->IoStatus.Information write的时候为length=myIrpSp->Parameters.Write.Length。 没错, 不过你要将原来的buffer的内容copy到你的缓冲,生成该缓冲的MDL,替换Irp->MdlAddress,下传给file system,恢复原来的MDL,释放缓冲。 |
|
7楼#
发布于:2003-03-22 10:21
错: 这里我就有两个问题了, 1,doc文件好像不用处理write? 2,如果是 Irp->UserBuffer的? 能不能给你的邮箱我,我寄我的代码给你看看,我实在是做的太久了,好累啊! 我的邮箱是swordbin@163.net 感激不尽! |
|
|
8楼#
发布于:2003-03-22 18:08
写了信了。
|
|