资源简介
里面的源码已经验证过,可以正常使用
代码片段和文件信息
#define BPOLY 0x1b //!< Lower 8 bits of (x^8+x^4+x^3+x+1) ie. (x^4+x^3+x+1).
#define BLOCKSIZE 16 //!< Block size in number of bytes.
#define KEY_COUNT 3
#if KEY_COUNT == 1
#define KEYBITS 128 //!< Use AES128.
#elif KEY_COUNT == 2
#define KEYBITS 192 //!< Use AES196.
#elif KEY_COUNT == 3
#define KEYBITS 256 //!< Use AES256.
#else
#error Use 1 2 or 3 keys!
#endif
#if KEYBITS == 128
#define ROUNDS 10 //!< Number of rounds.
#define KEYLENGTH 16 //!< Key length in number of bytes.
#elif KEYBITS == 192
#define ROUNDS 12 //!< Number of rounds.
#define KEYLENGTH 24 //!< // Key length in number of bytes.
#elif KEYBITS == 256
#define ROUNDS 14 //!< Number of rounds.
#define KEYLENGTH 32 //!< Key length in number of bytes.
#else
#error Key must be 128 192 or 256 bits!
#endif
#define EXPANDED_KEY_SIZE (BLOCKSIZE * (ROUNDS+1)) //!< 176 208 or 240 bytes.
unsigned char AES_Key_Table[32] =
{
0xd0 0x94 0x3f 0x8c 0x29 0x76 0x15 0xd8
0x20 0x40 0xe3 0x27 0x45 0xd8 0x48 0xad
0xea 0x8b 0x2a 0x73 0x16 0xe9 0xb0 0x49
0x45 0xb3 0x39 0x28 0x0a 0xc3 0x28 0x3c
};
unsigned char block1[256]; //!< Workspace 1.
unsigned char block2[256]; //!< Worksapce 2.
unsigned char tempbuf[256];
unsigned char *powTbl; //!< Final location of exponentiation lookup table.
unsigned char *logTbl; //!< Final location of logarithm lookup table.
unsigned char *sBox; //!< Final location of s-box.
unsigned char *sBoxInv; //!< Final location of inverse s-box.
unsigned char *expandedKey; //!< Final location of expanded key.
void CalcPowLog(unsigned char *powTbl unsigned char *logTbl)
{
unsigned char i = 0;
unsigned char t = 1;
do {
// Use 0x03 as root for exponentiation and logarithms.
powTbl[i] = t;
logTbl[t] = i;
i++;
// Muliply t by 3 in GF(2^8).
t ^= (t << 1) ^ (t & 0x80 ? BPOLY : 0);
}while( t != 1 ); // Cyclic properties ensure that i < 255.
powTbl[255] = powTbl[0]; // 255 = ‘-0‘ 254 = -1 etc.
}
void CalcSBox( unsigned char * sBox )
{
unsigned char i rot;
unsigned char temp;
unsigned char result;
// Fill all entries of sBox[].
i = 0;
do {
//Inverse in GF(2^8).
if( i > 0 )
{
temp = powTbl[ 255 - logTbl[i] ];
}
else
{
temp = 0;
}
// Affine transformation in GF(2).
result = temp ^ 0x63; // Start with adding a vector in GF(2).
for( rot = 0; rot < 4; rot++ )
{
// Rotate left.
temp = (temp<<1) | (temp>>7);
// Add rotated byte in GF(2).
result ^= temp;
}
// Put result in table.
sBox[i] = result;
} while( ++i != 0 );
}
void CalcSBoxInv( unsigned char * sBox unsigned char * sBoxInv )
{
unsigned char i = 0;
unsigned char j = 0;
// Iterate through all elements in sBoxInv using i.
do {
// Search through sBox using j.
do {
// Check if current j is the inverse of current i.
if( sBox[ j ] == i )
{
// If s
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 13233 2012-04-12 21:42 加密算法源码\AES.c
文件 12757 2012-04-12 21:37 加密算法源码\DES.C
文件 11630 2012-04-12 20:55 加密算法源码\MD5.C
文件 4863 2012-04-12 21:31 加密算法源码\RC6.C
文件 979 2012-04-13 01:10 加密算法源码\RSA.C
文件 7720 2012-04-12 20:58 加密算法源码\SHA1.C
文件 7633 2012-04-12 20:55 加密算法源码\SHA256.C
文件 2055 2012-04-12 21:55 加密算法源码\TEA.C
目录 0 2016-08-10 17:45 加密算法源码
----------- --------- ---------- ----- ----
60870 9
- 上一篇:NOIP2018普及组C++试题
- 下一篇:C语言连接Access数据库
评论
共有 条评论