linuxyf
驱动小牛
驱动小牛
  • 注册日期2007-04-03
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望162点
  • 贡献值0点
  • 好评度161点
  • 原创分1分
  • 专家分0分
阅读:1526回复:10

devia版主请进来,看一下我的思路是不是错了

楼主#
更多 发布于:2007-06-19 17:19
现在我在做一个  实现加密文件夹功能的程序。整个程序分成两个部分:

App部分:主要用于指定加密目录,指定后把加密目录记录到注册表中。同时,在指定加密目录时,如果该目录下有文件,则加密(RC4),最后,重启文件过滤驱动服务。

文件过滤驱动部分:主要用于实现底层的文件加解密(RC4),启动后,读取注册表中App部分设置的加密目录,如果有读该文件夹下的操作,则解密,如果写入该文件夹的操作,则加密后写入。

现在有这样一个问题,不知该如何解决:

开始时,文件夹D:\test1下面存在若干文件,如果我用   App部分  指定其为加密目录,那么App部分就会加密D:\test1下的文件后,写入该目录,与此同时,这些文件的加密内容进到缓存。此时,打开某一个文件,D:\test1下的是加密文件,本来应该由   文件过滤驱动部分  解密,呈现明文。但由于此时缓存中存在对应文件的密文,所以根本没有从硬盘读该文件,而是从缓存中读取的该文件,所以呈现的是密文。

要求设置完加密目录后,不能重启机子,但出现了上边的缓存中的密文事件,不知如何解决。devia版主能否指点一二???

也不知道我的问题讲清楚了没有。
在孤独和无助中缓慢前行...
linuxyf
驱动小牛
驱动小牛
  • 注册日期2007-04-03
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望162点
  • 贡献值0点
  • 好评度161点
  • 原创分1分
  • 专家分0分
沙发#
发布于:2007-06-19 17:21
忘了讲了,我指定的每一个加密目录,都对应保存了一个加密密钥,加解密都用这个密钥。
在孤独和无助中缓慢前行...
lauer
驱动牛犊
驱动牛犊
  • 注册日期2004-02-04
  • 最后登录2013-01-07
  • 粉丝1
  • 关注1
  • 积分578分
  • 威望127点
  • 贡献值1点
  • 好评度57点
  • 原创分1分
  • 专家分0分
板凳#
发布于:2007-06-19 19:08
类似的问题,都是缓存,不知怎样搞好,特别是驱动加载前就刚刚读取或写入的文件。

对于异地加密本地解密的用法来说,就存在这个很头疼的问题
linuxyf
驱动小牛
驱动小牛
  • 注册日期2007-04-03
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望162点
  • 贡献值0点
  • 好评度161点
  • 原创分1分
  • 专家分0分
地板#
发布于:2007-06-20 17:18
自己顶一下。
在孤独和无助中缓慢前行...
linuxyf
驱动小牛
驱动小牛
  • 注册日期2007-04-03
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望162点
  • 贡献值0点
  • 好评度161点
  • 原创分1分
  • 专家分0分
地下室#
发布于:2007-06-21 08:26
自己顶一下
在孤独和无助中缓慢前行...
linuxyf
驱动小牛
驱动小牛
  • 注册日期2007-04-03
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望162点
  • 贡献值0点
  • 好评度161点
  • 原创分1分
  • 专家分0分
5楼#
发布于:2007-06-22 09:50
自己顶一下,devia版主怎么不来帮忙呢?
在孤独和无助中缓慢前行...
isware
驱动牛犊
驱动牛犊
  • 注册日期2006-01-24
  • 最后登录2013-04-15
  • 粉丝0
  • 关注0
  • 积分385分
  • 威望79点
  • 贡献值0点
  • 好评度38点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2007-06-22 09:57
我看到几位大大的加密代码都是加密完成后把缓存还原成明文了的.
linuxyf
驱动小牛
驱动小牛
  • 注册日期2007-04-03
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望162点
  • 贡献值0点
  • 好评度161点
  • 原创分1分
  • 专家分0分
7楼#
发布于:2007-06-22 10:06
我在应用程序里还原不了啊
在孤独和无助中缓慢前行...
linuxyf
驱动小牛
驱动小牛
  • 注册日期2007-04-03
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望162点
  • 贡献值0点
  • 好评度161点
  • 原创分1分
  • 专家分0分
8楼#
发布于:2007-06-26 17:01
版主们进来看看啊,受不了了
在孤独和无助中缓慢前行...
devia
论坛版主
论坛版主
  • 注册日期2005-05-14
  • 最后登录2016-04-05
  • 粉丝3
  • 关注0
  • 积分1029分
  • 威望712点
  • 贡献值1点
  • 好评度555点
  • 原创分8分
  • 专家分4分
9楼#
发布于:2007-06-26 23:03
不好意思,这段时间很少有机会上网来看帖,:-)

1. 如果你要是在应用层作加密的话,那么READ、WRITE操作应使用非缓存操作;
2. 如果你要是在驱动层作加密的话,那么可以参照tooflat的透明加解密例子,
   具体函数名为:SfEncryptDecryptFileByFileObject;

不过你这种想法比较可怕,如果我把"%SystemRoot%\system32\"目录设置为
加密目录的话,那么结果会是什么样呢? :-<
人总在矛盾中徘徊。。。
linuxyf
驱动小牛
驱动小牛
  • 注册日期2007-04-03
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望162点
  • 贡献值0点
  • 好评度161点
  • 原创分1分
  • 专家分0分
10楼#
发布于:2007-06-28 18:00
devia版主,
如果你要是在应用层作加密的话,那么READ、WRITE操作应使用非缓存操作;
我是在应用层加密,非缓存加密写采用如下方式:
HANDLE outFile = CreateFile(saveFileName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_FLAG_NO_BUFFERING | FILE_FLAG_WRITE_THROUGH, NULL);
 WriteFile(outFile, data, tmp, &wmWritten, NULL);

但这种方式有问题啊,加上FILE_FLAG_NO_BUFFERING后,每次读写的大小必须是磁盘簇大小的整数倍。簇的大小取决与格式化时传入的参数。默认NTFS的是4*1024字节。所以读写的缓存大小最好是4K的整数倍。

那么当我的写的内容不是4k的整数倍的时候,就需要补足4k的整数倍后写入,这么一来就会多出一些无用的内容。

不过你这种想法比较可怕,如果我把"%SystemRoot%\system32\"目录设置为
加密目录的话,那么结果会是什么样呢? :-<

对于这个问题,应用程序中已经考虑,特殊目录是设置不成加密目录的。
在孤独和无助中缓慢前行...
游客

返回顶部