⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 aes1.h

📁 aes算法的c++实现及其加密解密过程所需时间的测试,无解压密码
💻 H
字号:
// Aes1.h: interface for the Aes class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_AES1_H__17D9C8A6_399D_4034_9618_1106169469A1__INCLUDED_)
#define AFX_AES1_H__17D9C8A6_399D_4034_9618_1106169469A1__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "stdafx.h"

class AES
{
public:
typedef enum ENUM_KeySize_
{
 BIT128 = 0,
 BIT192,
 BIT256
}ENUM_KEYSIZE;
public:
 AES( ENUM_KEYSIZE keysize, BYTE *key );
 ~AES(void);
 void Cipher( BYTE *input, BYTE *output );
 void InvCipher( BYTE *input, BYTE *output );
protected:
 BYTE *RotWord( BYTE *word );
 BYTE *SubWord( BYTE *word );
 void AddRoundKey(int round);
 void SubBytes();
 void InvSubBytes();
 void ShiftRows();
 void InvShiftRows();
 void MixColumns();
 void InvMixColumns();
  static BYTE gfmultby01(BYTE b)  //乘1
    {
      return b;
    }

    static BYTE gfmultby02(BYTE b) //乘2
    {
      if (b < 0x80)
        return (BYTE)(int)(b <<1);
      else
        return (BYTE)( (int)(b << 1) ^ (int)(0x1b) );
    }

    static BYTE gfmultby03(BYTE b)
    {
      return (BYTE) ( (int)gfmultby02(b) ^ (int)b );//GF域的加法运算就是异或
    }

    static BYTE gfmultby09(BYTE b)
    {
      return (BYTE)( (int)gfmultby02(gfmultby02(gfmultby02(b))) ^
                     (int)b );
    }

    static BYTE gfmultby0b(BYTE b)
    {
      return (BYTE)( (int)gfmultby02(gfmultby02(gfmultby02(b))) ^
                     (int)gfmultby02(b) ^
                     (int)b );
    }

    static BYTE gfmultby0d(BYTE b)
    {
      return (BYTE)( (int)gfmultby02(gfmultby02(gfmultby02(b))) ^
                     (int)gfmultby02(gfmultby02(b)) ^
                     (int)(b) );
    }

    static BYTE gfmultby0e(BYTE b)
    {
      return (BYTE)( (int)gfmultby02(gfmultby02(gfmultby02(b))) ^
                     (int)gfmultby02(gfmultby02(b)) ^
                     (int)gfmultby02(b) );
    }
 int Nb; //代表以字为单位的块长,
 int Nk;//代表以字为单位的密钥长度
 int Nr;//轮数 ,轮数是10、12或14中的任意一个并且是基于密码分析学理论的。
        //它直接取决于密钥长度。
 BYTE *key;// the seed key. size will be 4 * keySize from ctor.
 typedef struct BYTE4_
 {
  BYTE w[4];
 }BYTE4;
 BYTE4 *w;
 LPBYTE State[4];
 /*
    private byte[,] iSbox;  // inverse Substitution box 
    private byte[,] w;      // key schedule array. 
    private byte[,] Rcon;   // Round constants.
    private byte[,] State;  // State matrix*/

};

#endif // !defined(AFX_AES1_H__17D9C8A6_399D_4034_9618_1106169469A1__INCLUDED_)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -