阅读:1526回复:10
devia版主请进来,看一下我的思路是不是错了
现在我在做一个 实现加密文件夹功能的程序。整个程序分成两个部分:
App部分:主要用于指定加密目录,指定后把加密目录记录到注册表中。同时,在指定加密目录时,如果该目录下有文件,则加密(RC4),最后,重启文件过滤驱动服务。 文件过滤驱动部分:主要用于实现底层的文件加解密(RC4),启动后,读取注册表中App部分设置的加密目录,如果有读该文件夹下的操作,则解密,如果写入该文件夹的操作,则加密后写入。 现在有这样一个问题,不知该如何解决: 开始时,文件夹D:\test1下面存在若干文件,如果我用 App部分 指定其为加密目录,那么App部分就会加密D:\test1下的文件后,写入该目录,与此同时,这些文件的加密内容进到缓存。此时,打开某一个文件,D:\test1下的是加密文件,本来应该由 文件过滤驱动部分 解密,呈现明文。但由于此时缓存中存在对应文件的密文,所以根本没有从硬盘读该文件,而是从缓存中读取的该文件,所以呈现的是密文。 要求设置完加密目录后,不能重启机子,但出现了上边的缓存中的密文事件,不知如何解决。devia版主能否指点一二??? 也不知道我的问题讲清楚了没有。 |
|
|
沙发#
发布于:2007-06-19 17:21
忘了讲了,我指定的每一个加密目录,都对应保存了一个加密密钥,加解密都用这个密钥。
|
|
|
板凳#
发布于:2007-06-19 19:08
类似的问题,都是缓存,不知怎样搞好,特别是驱动加载前就刚刚读取或写入的文件。
对于异地加密本地解密的用法来说,就存在这个很头疼的问题 |
|
地板#
发布于:2007-06-20 17:18
自己顶一下。
|
|
|
地下室#
发布于:2007-06-21 08:26
自己顶一下
|
|
|
5楼#
发布于:2007-06-22 09:50
自己顶一下,devia版主怎么不来帮忙呢?
|
|
|
6楼#
发布于:2007-06-22 09:57
我看到几位大大的加密代码都是加密完成后把缓存还原成明文了的.
|
|
7楼#
发布于:2007-06-22 10:06
我在应用程序里还原不了啊
|
|
|
8楼#
发布于:2007-06-26 17:01
版主们进来看看啊,受不了了
|
|
|
9楼#
发布于:2007-06-26 23:03
不好意思,这段时间很少有机会上网来看帖,:-)
1. 如果你要是在应用层作加密的话,那么READ、WRITE操作应使用非缓存操作; 2. 如果你要是在驱动层作加密的话,那么可以参照tooflat的透明加解密例子, 具体函数名为:SfEncryptDecryptFileByFileObject; 不过你这种想法比较可怕,如果我把"%SystemRoot%\system32\"目录设置为 加密目录的话,那么结果会是什么样呢? :-< |
|
|
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\"目录设置为 加密目录的话,那么结果会是什么样呢? :-< 对于这个问题,应用程序中已经考虑,特殊目录是设置不成加密目录的。 |
|
|