能力值:
( LV2,RANK:10 )
|
-
-
2 楼
ixz
我觉得,需要在完成例程中对read处理一下,同时在write时,write前处理处理一下,在write的完成函数中同时需要对处理过的write irp恢复,我写的usb过滤就是这么处理的,可以格式化。
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
这个应该是方法问题。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
请问您能具体说一下吗?十分感谢
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
我使用xor算法却没问题…………
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
十分抱歉,刚才没有看代码,看了代码感觉没有问题。
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
请问您能告诉我qq吗?我想跟您详细聊聊……
谢谢
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
检查了很久还是没有查出什么问题……
我把rc4换成rc6同样出问题……
但是xor md5 或者直接xor rc4的密钥则不会出问题……
……崩溃中
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
filedisk,我没有做个,只看过代码,需要测测才知道为什么.
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
我上传这个源码吧……我把几乎所有的代码都排除掉了……只剩下filedisk的基本代码和那一行加密代码了……结果还是不行……您来测测吧……谢谢 也有人有同样的问题 http://bbs.pediy.com/showthread.php?t=149992&highlight=%E9%80%8F%E6%98%8E+%E6%98%8E%E5%8A%A0+%E5%8A%A0%E5%AF%86
http://bbs3.driverdevelop.com/simple/?t72391.html
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
我感觉格式化应该不走read,write..
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
什么?……不走这个……怎么可能……不走read write……那他是如何写入的?
而且如果是xor 一个字节的话……所有的数据都还是被加密了……
谢谢您,您能将得更详细一些吗?
|
能力值:
( LV8,RANK:130 )
|
-
-
13 楼
我来告诉你吧
IRP_MJ_READ,IRP_MJ_Write是无序的,而rc4却是有顺序,顺前后关联的
详细点是:
IRP_MJ_... 时,每个块必须为页(512)对齐.而这些块的地址,是随机的,不是先第一块,再第二块,再第三块,这样取,而是有可能跳跃式读写,
但是rc4加密,必须前后顺序关联,比如,
你加密顺序为,1,2,3块
再解密顺序却不一致,为1,3,2这样,解密出来的数据就不对了,完全错误
解密时,你也得按加密顺序来,1,2,3这样,数据解密出来才会正确。
个人建议你更换加密算法,如果实在不想更换,那你的rc4算法的用法得变化一下,一个rc4的key仅对一页数据有效,加密下一页数据时,重置rc4 的key
这样
第一页(512)
rc4_set _key
rc4_encrypt()
第二页(512)
rc4_set _key
rc4_encrypt()
第n页(512)
rc4_set _key
rc4_encrypt()
对于我的说法,你可以仔细测试一下rc算法,就明白了
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
那岂不是磁盘加密无法使用高强度的算法?
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
换成什么算法比较好呢?貌似cbc模式的aes同样不行
|
能力值:
( LV2,RANK:10 )
|
-
-
16 楼
但是从Parameters.Write.ByteOffset获取的长度来看……读写的长度并不能被512整除……
一般都是2000……
这是什么原因
呢?
|
能力值:
( LV2,RANK:10 )
|
-
-
17 楼
回答你上面三个问题
第一,cr4算高强度算法?现在一般都用分组加密,比如AES,才叫高强度算法呢
第二,没人告诉你cr4不行啊,13楼都告诉你方法了,AES更不用说,必须可以用。
第三,你的输出是%x,你的2000,是0x2000,你自己算算0x2000是多少,能否被512整除。
|
能力值:
( LV2,RANK:10 )
|
-
-
18 楼
aes貌似不能直接用
|
能力值:
( LV9,RANK:160 )
|
-
-
19 楼
不管使用rc4、aes或者其他加密算法,一般要有个最小加密长度,这样向下对齐之后加密解密才正常,我通常加密的最小长度选512字节,以512字节为一个加密单元,因为磁盘层都是512字节对齐的,所以这个加密单元长度最好能被512整除,处理了这种加密对齐的关系之后基本就没啥难度了,可以看truecrypt是怎么弄的,不过对于初学者来说truecrypt代码可能比较绕,至于强度,选个rc4的长密钥(256字节)完全够用了,关键是rc4速度快,和aes不是在一个数量级上的。
|
能力值:
( LV2,RANK:10 )
|
-
-
20 楼
请问您能拿rc4或者rc6帮我做个例子吗?谢谢……以前对加密算法没有研究……一直都是做普通的底层开发……
到底需要如何使用这个算法才是正确的
谢谢
|
能力值:
( LV2,RANK:10 )
|
-
-
21 楼
唉,为啥我的filedisk用AES用得好好的,怎么就你不能用呢,都告诉你13楼的就是方法了,为啥你不相信呢
|
能力值:
( LV9,RANK:160 )
|
-
-
22 楼
typedef struct tagCrypt_info
{
unsigned char Size;
unsigned char Hash[256];
}CRYPT_INFO,*PCRYPT_INFO;
#define MIN_CRYPT_LEN 512
#define KEY_LEN 32
int EncryptUnit(PCRYPT_INFO CryptInfo,void *BufferIn,void*BufferOut)
{
unsigned char *Start,*Out;
aes_encrypt_ctx ctx={0};
int Count=MIN_CRYPT_LEN/16,k=0,p=0;
Start=(unsigned char*)BufferIn;
Out=(unsigned char*)BufferOut;
for(k=0,p=0;k<Count;k++,p++)
{
p=p%(256/32);
aes_encrypt_key256(CryptInfo->Hash+p*KEY_LEN,&ctx);
aes_encrypt(Start+k*16,Out+k*16,&ctx);
}
return 1;
}
int DecryptUnit(PCRYPT_INFO CryptInfo,void *BufferIn,void*BufferOut)
{
unsigned char *Start,*Out;
aes_decrypt_ctx ctx={0};
int Count=MIN_CRYPT_LEN/16,k=0,p=0;
Start=(unsigned char*)BufferIn;
Out=(unsigned char*)BufferOut;
for(k=0,p=0;k<Count;k++,p++)
{
p=k;
p=p%(256/32);
aes_decrypt_key256(CryptInfo->Hash+p*KEY_LEN,&ctx);
aes_decrypt(Start+k*16,Out+k*16,&ctx);
}
return 1;
}
这个是很久前学习truecrypt的时候写的,很垃圾,每次实现512字节加密或者解密,使用它们对所有读写后的缓冲区进行加密或者解密就可以了,我这边代码还是能工作的,可以根据读写的地址对CRYPT_INFO的Hash进行一些变换,呵呵自己发挥吧……写加密的时候不要直接使用原来的缓冲区,自己再分配一个
|
能力值:
( LV2,RANK:10 )
|
-
-
23 楼
[QUOTE=鹿剑;1169894]typedef struct tagCrypt_info
{
unsigned char Size;
unsigned char Hash[256];
}CRYPT_INFO,*PCRYPT_INFO;
#define MIN_CRYPT_LEN 512
#define KEY_LE...[/QUOTE]
十分感谢………………太谢谢了
|
能力值:
( LV2,RANK:10 )
|
-
-
24 楼
楼主您好,我最近也在学习这个,请问您的代码应该如何测试呢?
磁盘加密的作用是否是:如果拷贝本磁盘的数据到其他磁盘,显示为密文?
|
能力值:
( LV2,RANK:10 )
|
-
-
25 楼
你说的这个是透明加密……汗……
|
|
|