Ice_Bin
驱动牛犊
驱动牛犊
  • 注册日期2002-02-25
  • 最后登录2004-01-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2379回复:8

关于文件的加密问题,(动态和静态的结合)

楼主#
更多 发布于:2003-03-21 10:46
比如对doc文件先进行静态加密(像winzip的操作),再读的时候动态解密,就是截取mj_read然后进行解密,居然不行!doc文件以损坏。

问题就是,window2000的文件是不是将文件的格式数据(比如,大小,文件名等)和存储的数据(比如word打开的数据)存储在一起,而上面的操作加密的时候将格式数据给加密的,而解密的时候却没有解密?

如果是这样的问题的话应该如何解决?
好好学习 天天向上
vcmfc
驱动中牛
驱动中牛
  • 注册日期2001-03-23
  • 最后登录2008-01-28
  • 粉丝0
  • 关注0
  • 积分528分
  • 威望53点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-03-21 13:15
不会不行呀!!!!


我前产品就是这样的。


我认为你的错误点(推测):你用的加密算法身上,一般国际标准算法有,在加密是按组的加密的,解密一定要整个组才能解密,取其中一部分是不可能解密的。

  检测方法:先加算法改为最简单的xor,到运行你的filter,如果不行,那就是你的filter的IRP_MJ_READ处理有误,如果就是在算法的分组对齐上。

  你是不是也在写加密产品?
=ku=ku=
驱动牛犊
驱动牛犊
  • 注册日期2003-01-16
  • 最后登录2010-12-02
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望23点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-03-21 16:46
vcmfc: 我现在用(9x)xor,通过了!但用rc2加密,算法是分组的!分组算法的问题?如何解决呢? :(
*__*
vcmfc
驱动中牛
驱动中牛
  • 注册日期2001-03-23
  • 最后登录2008-01-28
  • 粉丝0
  • 关注0
  • 积分528分
  • 威望53点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-03-21 18:53
处理分组呀!!!!

当用户读数据时,你要得到偏移量,再计算分组的偏移量,如果不是,自已读,再解密,再将数据计算后,copy,再计算偏移量,移到正确的地方,返回,OK。(如果用Zw函数,可能会简单些,不过也是很烦麻的。)

写数据也是。
Ice_Bin
驱动牛犊
驱动牛犊
  • 注册日期2002-02-25
  • 最后登录2004-01-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-03-21 20:11
不会不行呀!!!!


我前产品就是这样的。


我认为你的错误点(推测):你用的加密算法身上,一般国际标准算法有,在加密是按组的加密的,解密一定要整个组才能解密,取其中一部分是不可能解密的。

  检测方法:先加算法改为最简单的xor,到运行你的filter,如果不行,那就是你的filter的IRP_MJ_READ处理有误,如果就是在算法的分组对齐上。

  你是不是也在写加密产品?


对啊,我现在是试验阶段,只是简单的把每个字节取反,解密的时候也是把每个字节取反?
这样不行吗?

对doc文件进行加密的时候是不是在最后tmp文件rename的时候,将doc文件加密,也等于是静态加密,不知道这样做行不行?

而read时候只对read*进行操作!
好好学习 天天向上
Ice_Bin
驱动牛犊
驱动牛犊
  • 注册日期2002-02-25
  • 最后登录2004-01-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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。

有没有问题?
好好学习 天天向上
vcmfc
驱动中牛
驱动中牛
  • 注册日期2001-03-23
  • 最后登录2008-01-28
  • 粉丝0
  • 关注0
  • 积分528分
  • 威望53点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
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,释放缓冲。

Ice_Bin
驱动牛犊
驱动牛犊
  • 注册日期2002-02-25
  • 最后登录2004-01-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-03-22 10:21
错:


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,释放缓冲。

 


这里我就有两个问题了,
1,doc文件好像不用处理write?
2,如果是 Irp->UserBuffer的?

能不能给你的邮箱我,我寄我的代码给你看看,我实在是做的太久了,好累啊!
我的邮箱是swordbin@163.net
感激不尽!

好好学习 天天向上
vcmfc
驱动中牛
驱动中牛
  • 注册日期2001-03-23
  • 最后登录2008-01-28
  • 粉丝0
  • 关注0
  • 积分528分
  • 威望53点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-03-22 18:08
写了信了。
游客

返回顶部