阅读:21015回复:59
(原创)透明加解密-AES等长加密算法(含代码)
[post] 在没有解决文件透明加解密的变长加密问题之前,我们大多数都采用等长加密,而等长加密算法有
异或、取反、取反+异或、RC4等,现在经过2天时间终于把AES算法也纳入进来,请大家验证! 1. 支持用户层、核心层两种模式(用_USRMODE宏控制); 2. 使用方法如下: // // AES Cipher handle and keys // AES_HANDLE gFltCipherAES; // AES句柄 BYTE gFltCipherAESKey[256/8] = {'T'}; // 密钥,可换作其它 // // 初始化 // gFltCipherAES = AESInitialize(BIT256, gFltCipherAESKey); ASSERT(NULL != gFltCipherAES); // // 加密 // AESCipher( gFltCipherAES, (BYTE*)InBuffer, (BYTE*)OutBuffer, Length ); // // 解密 // AESInvCipher( gFltCipherAES, (BYTE*)InBuffer, (BYTE*)OutBuffer, Length ); // // 反初始化 // AESUnInitialize(gFltCipherAES); |
|
|
沙发#
发布于:2011-06-21 21:12
版主帮附上附件啊.
|
|
板凳#
发布于:2011-06-21 21:11
提示附件不存在,下不了.
|
|
地板#
发布于:2011-06-21 21:10
学习一下.
|
|
地下室#
发布于:2011-06-02 18:34
kankan
|
|
5楼#
发布于:2010-11-23 16:39
shenhui ( 做一名诚实、正直、优秀的科技工作者!) 大牛,可以给我一份快加密的程序学习吗?我执意在修改你以前发的那个程序,想把他修改为块加密,可是一直弄不好,急啊!
![]() ![]() |
|
6楼#
发布于:2010-08-10 11:44
回 49楼(wwg266543) 的帖子
有AES 的 CTR 模式的吗? |
|
7楼#
发布于:2010-03-11 11:01
学习,学习,再学习!
|
|
8楼#
发布于:2009-11-04 14:32
have a look
|
|
9楼#
发布于:2009-10-29 13:51
顶起,收藏备用
|
|
10楼#
发布于:2009-08-10 16:01
了解下,,,,
|
|
11楼#
发布于:2009-08-04 11:50
给一个c版本的AES加密库!
|
|
|
12楼#
发布于:2009-07-29 18:14
楼上的兄弟,你确信你试验的很充分吗?
解密是要在read的完成函数中做的,你可以读取一个只有7个字节的txt文档,在read completion里面看看IoStatus.Information是多少。 |
|
|
13楼#
发布于:2009-07-29 10:17
不管文件大小怎么变化,实际存储的时候在Read和Write中都是固定大小的存取,如4096 32768 。。。。。等等块字节 你可以试验,即使文件大小只有1K 但是读取的时候至少也有4096个字节 所以不管文件大小怎么变化,具体的数据存储区的大小是16的整数倍的 |
|
14楼#
发布于:2008-07-11 15:18
收下啦
谢谢啦 正需要呢 |
|
15楼#
发布于:2007-07-13 14:37
感觉分组加密算法实现等长加密有问题。
|
|
|
16楼#
发布于:2007-07-13 09:59
顶,楼主怎么不把话说清楚就撒手不管了,您用这个代码真的做过实验可以等长加密吗?
|
|
|
17楼#
发布于:2007-06-21 16:41
好,顶一下
|
|
|
18楼#
发布于:2007-06-21 10:20
楼主提供的算法确实不能实现等长加密,我修改了其中的加解密函数(对于最后16个字节数据不进行加密):
extern "C" void AESCipher(AES_HANDLE AesHandle, BYTE *input, BYTE *output, ULONG length) { BYTE *pi, *po; ULONG i ; pi = input; po = output; for(i = 0; i < length; i+=16) { if ((length - i) >= 16) { Cipher(AesHandle, pi, po); } else { break ; } pi+=16; po+=16; } } extern "C" void AESInvCipher(AES_HANDLE AesHandle, BYTE *input, BYTE *output, ULONG length) { BYTE *pi, *po; ULONG i ; pi = input; po = output; for(i = 0; i < length; i+=16) { if ((length - i) >= 16) { InvCipher(AesHandle, pi, po); } else { break ; } pi+=16; po+=16; } } 然后测试了一下, 发现用IrpSp->Parameters.Write.Length作为加密长度输入,肯定不行,因为每次这个长度的值都是0x1000,但实际上我只写入了7个字节,所以还是会对这7个字节加密,这样解密出来以后就得不到正确的结果; 如果我用strlen((char*)Buffer)得到缓冲区的真实长度作为输入来进行加解密操作,那么加密是没有问题的,但读数据时解密又出现问题了,因为系统初始化时都要对每个卷中的目录进行扫描,并从中读出一些数据,这些数据是没有规则的,可能会导致strlen((char *)Buffer)等于0,不能正确的解密意味着不能初始化卷,这样就不能识别卷。 |
|
|
19楼#
发布于:2007-05-17 18:17
AES 有CTR 模式的,AES的标准里面有的
|
|
上一页
下一页