devia
论坛版主
论坛版主
  • 注册日期2005-05-14
  • 最后登录2016-04-05
  • 粉丝3
  • 关注0
  • 积分1029分
  • 威望712点
  • 贡献值1点
  • 好评度555点
  • 原创分8分
  • 专家分4分
阅读:20020回复:59

(原创)透明加解密-AES等长加密算法(含代码)

楼主#
更多 发布于:2007-04-02 13:32
[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);
附件名称/大小 下载次数 最后更新
kaes.rar (4KB)  863 2007-04-02 13:32

最新喜欢:

舍七淡六舍七淡六 lipengyilipeng... arbelarbel snoxsnox
人总在矛盾中徘徊。。。
sandu
驱动牛犊
驱动牛犊
  • 注册日期2011-06-18
  • 最后登录2011-11-13
  • 粉丝0
  • 关注0
  • 积分18分
  • 威望141点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2011-06-21 21:12
版主帮附上附件啊.
sandu
驱动牛犊
驱动牛犊
  • 注册日期2011-06-18
  • 最后登录2011-11-13
  • 粉丝0
  • 关注0
  • 积分18分
  • 威望141点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2011-06-21 21:11
提示附件不存在,下不了.
sandu
驱动牛犊
驱动牛犊
  • 注册日期2011-06-18
  • 最后登录2011-11-13
  • 粉丝0
  • 关注0
  • 积分18分
  • 威望141点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2011-06-21 21:10
学习一下.
hnn-xinyao
驱动牛犊
驱动牛犊
  • 注册日期2011-05-22
  • 最后登录2011-06-08
  • 粉丝1
  • 关注1
  • 积分4分
  • 威望41点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2011-06-02 18:34
kankan
lsfwhut
驱动牛犊
驱动牛犊
  • 注册日期2010-11-10
  • 最后登录2012-02-14
  • 粉丝0
  • 关注1
  • 积分22分
  • 威望221点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2010-11-23 16:39
shenhui ( 做一名诚实、正直、优秀的科技工作者!)  大牛,可以给我一份快加密的程序学习吗?我执意在修改你以前发的那个程序,想把他修改为块加密,可是一直弄不好,急啊!
xum2008
驱动牛犊
驱动牛犊
  • 注册日期2009-05-08
  • 最后登录2014-08-10
  • 粉丝0
  • 关注0
  • 积分75分
  • 威望741点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2010-08-10 11:44
回 49楼(wwg266543) 的帖子
有AES 的 CTR 模式的吗?
daniel_bao
驱动牛犊
驱动牛犊
  • 注册日期2007-04-14
  • 最后登录2010-03-11
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望71点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2010-03-11 11:01
学习,学习,再学习!
zengpeng0322
驱动牛犊
驱动牛犊
  • 注册日期2009-04-09
  • 最后登录2010-05-15
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望81点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2009-11-04 14:32
have a look
dino200606
驱动牛犊
驱动牛犊
  • 注册日期2008-01-19
  • 最后登录2019-05-19
  • 粉丝3
  • 关注0
  • 积分10分
  • 威望98点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
  • 社区居民
9楼#
发布于:2009-10-29 13:51
顶起,收藏备用
mixia
驱动牛犊
驱动牛犊
  • 注册日期2009-06-18
  • 最后登录2009-08-10
  • 粉丝0
  • 关注0
  • 积分18分
  • 威望151点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2009-08-10 16:01
了解下,,,,
wwg266543
驱动小牛
驱动小牛
  • 注册日期2007-07-03
  • 最后登录2014-08-27
  • 粉丝3
  • 关注1
  • 积分3分
  • 威望882点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分54分
11楼#
发布于:2009-08-04 11:50
给一个c版本的AES加密库!
附件名称/大小 下载次数 最后更新
kaes.rar (28KB)  54 2009-08-04 11:50
shenhui
驱动小牛
驱动小牛
  • 注册日期2006-05-11
  • 最后登录2023-02-10
  • 粉丝14
  • 关注11
  • 积分142分
  • 威望1314点
  • 贡献值1点
  • 好评度146点
  • 原创分0分
  • 专家分1分
  • 社区居民
12楼#
发布于:2009-07-29 18:14
楼上的兄弟,你确信你试验的很充分吗?
解密是要在read的完成函数中做的,你可以读取一个只有7个字节的txt文档,在read completion里面看看IoStatus.Information是多少。
作一名真实,诚实,优秀的科技工作者!
shar123
驱动牛犊
驱动牛犊
  • 注册日期2009-05-12
  • 最后登录2009-10-09
  • 粉丝0
  • 关注0
  • 积分59分
  • 威望461点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2009-07-29 10:17

   AES是分组算法,你是怎么解决文件的变长处理的?


不管文件大小怎么变化,实际存储的时候在Read和Write中都是固定大小的存取,如4096 32768 。。。。。等等块字节

你可以试验,即使文件大小只有1K 但是读取的时候至少也有4096个字节

所以不管文件大小怎么变化,具体的数据存储区的大小是16的整数倍的
minmin0876
驱动牛犊
驱动牛犊
  • 注册日期2007-08-22
  • 最后登录2008-08-18
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望5点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2008-07-11 15:18
收下啦
谢谢啦
正需要呢
linuxyf
驱动小牛
驱动小牛
  • 注册日期2007-04-03
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望162点
  • 贡献值0点
  • 好评度161点
  • 原创分1分
  • 专家分0分
15楼#
发布于:2007-07-13 14:37
感觉分组加密算法实现等长加密有问题。
在孤独和无助中缓慢前行...
shenhui
驱动小牛
驱动小牛
  • 注册日期2006-05-11
  • 最后登录2023-02-10
  • 粉丝14
  • 关注11
  • 积分142分
  • 威望1314点
  • 贡献值1点
  • 好评度146点
  • 原创分0分
  • 专家分1分
  • 社区居民
16楼#
发布于:2007-07-13 09:59
顶,楼主怎么不把话说清楚就撒手不管了,您用这个代码真的做过实验可以等长加密吗?
作一名真实,诚实,优秀的科技工作者!
ceabie
驱动牛犊
驱动牛犊
  • 注册日期2006-08-23
  • 最后登录2010-07-21
  • 粉丝0
  • 关注0
  • 积分599分
  • 威望140点
  • 贡献值0点
  • 好评度59点
  • 原创分1分
  • 专家分0分
17楼#
发布于:2007-06-21 16:41
好,顶一下
XeChini
shenhui
驱动小牛
驱动小牛
  • 注册日期2006-05-11
  • 最后登录2023-02-10
  • 粉丝14
  • 关注11
  • 积分142分
  • 威望1314点
  • 贡献值1点
  • 好评度146点
  • 原创分0分
  • 专家分1分
  • 社区居民
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,不能正确的解密意味着不能初始化卷,这样就不能识别卷。
作一名真实,诚实,优秀的科技工作者!
bluacat
驱动小牛
驱动小牛
  • 注册日期2004-09-13
  • 最后登录2016-09-25
  • 粉丝0
  • 关注0
  • 积分1023分
  • 威望277点
  • 贡献值0点
  • 好评度146点
  • 原创分0分
  • 专家分0分
  • 社区居民
19楼#
发布于:2007-05-17 18:17
AES 有CTR 模式的,AES的标准里面有的
上一页
游客

返回顶部