阅读:2422回复:7
filedisk的加密
最近对filedisk很感兴趣,想对它加上加密技术,我看过以前的贴子,也大概了解了一些,但是有几个问题一直想不通,希望你能帮我一下,不胜感激!
一、一般的加密算法在加完密后字符串会变长,这样在写入与读出时如何处理呀,或者有没有加完密后不会变长的算法。 二、密匙是如何传递给驱动程序的,是不是在Mount时跟随OPEN_FILE_INFORMATION一样进去呀(加多一个字段),但是这个变量是不是全局的呀,在Read/Write里如何得到它。 三、Read/Write的块大小是多少呀(不可能一个字节一个字节的吧) 能否提供一种好的加密算法代码呀 我初学驱动,还望多多帮助! |
|
沙发#
发布于:2003-11-29 16:27
我真笨,原来加密算法是不会改变长度的,之所以会“变长”是在显示的时候进进了BASE64编码而已。
现在这个问题已解决了,但是,我加入了加密算法后,就无法进行格式化了。不知哪里出了问题。大家帮我看看 case IRP_MJ_READ: CurrentAddress = MmGetSystemAddressForMdlSafe(irp->MdlAddress, NormalPagePriority); tmplen = io_stack->Parameters.Read.Length; if ((tmplen%8)!=0) tmplen = (tmplen/8+1)*8; buf=ExAllocatePool(NonPagedPool,tmplen); // 偏移IMAGE_HEAD_SIZE个单位,光盘文件除外 if (device_object->DeviceType != FILE_DEVICE_CD_ROM) io_stack->Parameters.Read.ByteOffset.QuadPart+=IMAGE_HEAD_SIZE; ZwReadFile( device_extension->file_handle, NULL, NULL, NULL, &irp->IoStatus, buf, io_stack->Parameters.Read.Length, &io_stack->Parameters.Read.ByteOffset, NULL ); des_ec(buf,buf,\"12345678\"); RtlCopyMemory(CurrentAddress,buf,io_stack->Parameters.Read.Length); ExFreePool(buf); break; case IRP_MJ_WRITE: // 偏移IMAGE_HEAD_SIZE个单位,光盘文件除外 if (device_object->DeviceType != FILE_DEVICE_CD_ROM) io_stack->Parameters.Write.ByteOffset.QuadPart+=IMAGE_HEAD_SIZE; if ((io_stack->Parameters.Write.ByteOffset.QuadPart + io_stack->Parameters.Write.Length) > device_extension->file_size.QuadPart) { irp->IoStatus.Status = STATUS_INVALID_PARAMETER; irp->IoStatus.Information = 0; } CurrentAddress = MmGetSystemAddressForMdlSafe(irp->MdlAddress, NormalPagePriority); tmplen = io_stack->Parameters.Write.Length; if ((tmplen%8)!=0) tmplen = (tmplen/8+1)*8; buf=ExAllocatePool(NonPagedPool,tmplen); RtlCopyMemory(buf,CurrentAddress,io_stack->Parameters.Write.Length); des_ec(buf,buf,\"12345678\"); ZwWriteFile( device_extension->file_handle, NULL, NULL, NULL, &irp->IoStatus, buf, io_stack->Parameters.Write.Length, &io_stack->Parameters.Write.ByteOffset, NULL ); ExFreePool(buf); break; |
|
板凳#
发布于:2003-11-29 17:44
问题发现了,但不知如何解决
进行des_ec(buf,buf,\"12345678\"); 时,它只对buf中第一个\'\\0\'值之前加密,之后的就不加密了。 如何克服这个难点。 唉,这段时间都是我自问自答,难道高手就不出现吗? |
|
地板#
发布于:2003-11-30 18:02
唉,果然是我自问自答。
以上问题现已解决。 但是,出现了另一个难题。 我采用的是DES加密,可是在当对磁盘操作时,显得有点迟泄,特别是大量数据copy或打开大文件时。 而且,偶而会出错,在经过大量操作后,偶而会出来错误,然后信息就全乱了,重新mount后就提示没有格式化,然后,连格式化都无法进行了。但是,出现上述错误后,我只需stop 一下驱动程序,在start起来,问题又没了。 高手们,虽藏了。我虽然是新手,但总算克服了重重困难。如果高手们能指点一二,我就不用这么辛苦了。 |
|
地下室#
发布于:2003-11-30 18:13
驱动这个东东,一点小错误就会让人郁闷很久,没有看到实在的问题,一般别人也帮不了了。
|
|
|
5楼#
发布于:2003-12-03 15:06
驱动这个东东,一点小错误就会让人郁闷很久,没有看到实在的问题,一般别人也帮不了了。 同意! |
|
6楼#
发布于:2003-12-12 12:19
加密后效果如何阿,对性能影响大吗,关注
|
|
7楼#
发布于:2010-04-15 11:20
感谢楼主对经验的分享
|
|