• 大小: 32KB
    文件类型: .zip
    金币: 2
    下载: 1 次
    发布日期: 2021-06-25
  • 语言: C/C++
  • 标签: AES  CBC  

资源简介

本资源是基于VC6.0编写的源代码,其中AesCBC.h和AesCBC.cpp文件实现了AES CBC模式128位、192位和256位加解密算法,并附有相关接口使用的实例测试代码。

资源截图

代码片段和文件信息

/******************************************************************************
  Copyright (c) 2012-2022 jiangkun. All rights reserved.
  File Name     : AesCBC.cpp
  Version       : Initial Draft
  Author        : jiangkun
  Created       : 2012/04/10
  Last Modified :
  Description   : The Cipher Block chaining(CBC) mode encryption and decryption
  Function List :
  History       :
  Date          : 2012/04/10
  Author        : jiangkun
  Modification  : Created file
******************************************************************************/

#include 
#include 
#include 
#include “AesCBC.h“

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#if defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_AMD64) || defined(_M_X64))
# define SWAP(x) (_lrotl(x 8) & 0x00ff00ff | _lrotr(x 8) & 0xff00ff00)
# define GETU32(p) SWAP(*((u32 *)(p)))
# define PUTU32(ct st) { *((u32 *)(ct)) = SWAP((st)); }
#else
# define GETU32(pt) (((u32)(pt)[0] << 24) ^ ((u32)(pt)[1] << 16) ^ ((u32)(pt)[2] <<  8) ^ ((u32)(pt)[3]))
# define PUTU32(ct st) { (ct)[0] = (u8)((st) >> 24); (ct)[1] = (u8)((st) >> 16); (ct)[2] = (u8)((st) >>  8); (ct)[3] = (u8)(st); }
#endif

#ifdef AES_LONG
typedef unsigned long u32;
#else
typedef unsigned int u32;
#endif
typedef unsigned short u16;
typedef unsigned char u8;

#define MAXKC   (256/32)
#define MAXKB   (256/8)
#define MAXNR   14

#undef FULL_UNROLL

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*
Te0[x] = S [x].[02 01 01 03];
Te1[x] = S [x].[03 02 01 01];
Te2[x] = S [x].[01 03 02 01];
Te3[x] = S [x].[01 01 03 02];

Td0[x] = Si[x].[0e 09 0d 0b];
Td1[x] = Si[x].[0b 0e 09 0d];
Td2[x] = Si[x].[0d 0b 0e 09];
Td3[x] = Si[x].[09 0d 0b 0e];
Td4[x] = Si[x].[01];
*/

static const u32 Te0[256] = {
    0xc66363a5U 0xf87c7c84U 0xee777799U 0xf67b7b8dU
    0xfff2f20dU 0xd66b6bbdU 0xde6f6fb1U 0x91c5c554U
    0x60303050U 0x02010103U 0xce6767a9U 0x562b2b7dU
    0xe7fefe19U 0xb5d7d762U 0x4dababe6U 0xec76769aU
    0x8fcaca45U 0x1f82829dU 0x89c9c940U 0xfa7d7d87U
    0xeffafa15U 0xb25959ebU 0x8e4747c9U 0xfbf0f00bU
    0x41adadecU 0xb3d4d467U 0x5fa2a2fdU 0x45afafeaU
    0x239c9cbfU 0x53a4a4f7U 0xe4727296U 0x9bc0c05bU
    0x75b7b7c2U 0xe1fdfd1cU 0x3d9393aeU 0x4c26266aU
    0x6c36365aU 0x7e3f3f41U 0xf5f7f702U 0x83cccc4fU
    0x6834345cU 0x51a5a5f4U 0xd1e5e534U 0xf9f1f108U
    0xe2717193U 0xabd8d873U 0x62313153U 0x2a15153fU
    0x0804040cU 0x95c7c752U 0x46232365U 0x9dc3c35eU
    0x30181828U 0x379696a1U 0x0a05050

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2012-10-17 11:36  AesTest\
     文件       58474  2012-04-19 15:32  AesTest\AesCBC.cpp
     文件        1680  2012-04-19 15:32  AesTest\AesCBC.h
     文件        1744  2012-04-19 15:03  AesTest\AesTest.cpp
     文件        4680  2012-04-19 20:15  AesTest\AesTest.dsp
     文件         537  2012-04-06 10:00  AesTest\AesTest.dsw
     文件       91136  2012-10-17 11:36  AesTest\AesTest.ncb
     文件       54784  2012-10-17 11:36  AesTest\AesTest.opt
     文件         248  2012-04-19 15:35  AesTest\AesTest.plg
     目录           0  2012-10-17 11:37  AesTest\Debug\
     文件        1214  2012-04-06 10:00  AesTest\ReadMe.txt
     文件         294  2012-04-06 10:00  AesTest\StdAfx.cpp
     文件         769  2012-04-06 10:00  AesTest\StdAfx.h

评论

共有 条评论