阅读:2879回复:8
关于在minifilter中使用分组加密算法的加密写问题
相关贴:http://bbs.driverdevelop.com/htm_data/39/0704/100483.html
在prewrite写中,如果用iopb->Parameters.Write.Length作为分组加密的长度肯定不行,因为这个值始终为0x1000,即便我只写7个字节的文本文件。然而,分组加密例如AES,分组长度如果为16字节,那么注定在解密的时候失败,因为只能读7个字节的密文而正常解密需要一个分组长度16字节。 其实,这个缓冲区中前7个字节是正常的写入数据,后面的全部用'\ 0'填充,直到0x1000 "如果strlen((char*)Buffer)得到缓冲区的真实长度作为输入来进行加解密操作,那么加密是没有问题的,但读数据时解密又出现问题了,因为系统初始化时都要对每个卷中的目录进行扫描,并从中读出一些数据,这些数据是没有规则的,可能会导致strlen((char *)Buffer)等于0,不能正确的解密意味着不能初始化卷,这样就不能识别卷。"------摘录至http://bbs.driverdevelop.com/read.php?tid-100483-fpage-0-toread--page-3.html 如果从后向前搜索至不为'\0'的位置为要写入的数据长度的话,是否又可以呢?我想如过在prewrite中晓得要写入的真正长度就不会有这个问题了。 实验证明,如果用异或来加密肯定没问题,因为异或的分组长度为1,所以不会错。但如果分组长度大于1,便可能出错。请问大牛们是怎么解决这个问题的呢?还是我的分组加密思路不对? |
|
沙发#
发布于:2008-08-19 16:37
可以详细点么,如何对齐呢?我的加密并没有使用加密文件头什么来着。。。
|
|