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

📄 aes.h

📁 详细的AESRSASHA1实现原理
💻 H
字号:
// AES.h: interface for the CAES class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_AES_H__24F52477_C792_4EBA_9A24_E73DCAB1D5B6__INCLUDED_)
#define AFX_AES_H__24F52477_C792_4EBA_9A24_E73DCAB1D5B6__INCLUDED_

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

#define MAX_BLOCKS      1000
#define MAX_KEY_SIZE    24
#define MAX_ROUND		20
#define MAX_COL			(MAX_KEY_SIZE>>2)

#define UN_SET_KEY_SIZE 1
#define UN_SET_ROUND    2

typedef BYTE AES_BLOCK[4][MAX_COL];

class CAES  
{
private:
    int		    m_iBlocks; 
    int         m_iKeySize;
    int         m_iCol;
    int         m_iRound;
    AES_BLOCK	m_pBlocks[MAX_BLOCKS];

public:
    CAES();
    virtual ~CAES();
    
private:
    BYTE m_pSBox[16][16];
    BYTE m_pInvSBox[16][16];
    BYTE m_pMixColMatrix[4][4];
    BYTE m_pInvMixColMatrix[4][4];
    AES_BLOCK m_pRoundKey[MAX_ROUND+1];

private:
    void TransMsgToBlocks( CString strMsg );
    void TransBlocksToCryptInHex( CString& strCrypt );
    void EncryptBlock( AES_BLOCK b );

    void CAES::TransBlocksToDecrypt( CString& strDecrypt );
    void DecryptBlock( AES_BLOCK b );
	   
public:
    void SetKeySize( int iSize );
    void SetRound( int iRound );
    void GenerateRandomKey( );
    void GetRoundKey( int iRound, CString& strKey );

    void Encrypt( CString strMsg, CString& strCrypt );
    void Decrypt( CString strCrypt, CString& strDecrypt ); 
    
private:
    void TransKeyRow3( BYTE round, BYTE result[MAX_COL] );
    BYTE GF256_IsBitTrue( BYTE n, BYTE pos );
    BYTE GF256_GetHighBitPos( BYTE n );
    BYTE GF256_Add( BYTE a, BYTE b );
    BYTE GF256_Sub( BYTE a, BYTE b );
    BYTE GF256_Mul( BYTE a, BYTE b );
    BYTE GF256_Div( BYTE a, BYTE b );
    BYTE GF256_Eculid_Inverse( BYTE b );
    BYTE GF256_Affine( BYTE n );
    BYTE GF256_Xtime( BYTE n );
    
    void KeyExpansion();
    void ValuedMixColMatrixAndInvMixColMatrix();
    void GenerateSboxAndInvSBox();
    void AddRoundKey( AES_BLOCK b, BYTE round );
    void MixColumns( AES_BLOCK b );
    void ShiftRows( AES_BLOCK b );
    void SubBytes( AES_BLOCK b );
    void InvAddRoundKey( AES_BLOCK b, BYTE round );
    void InvMixColumns( AES_BLOCK b );
    void InvShiftRows( AES_BLOCK b );
    void InvSubBytes( AES_BLOCK b ); 
};

#endif // !defined(AFX_AES_H__24F52477_C792_4EBA_9A24_E73DCAB1D5B6__INCLUDED_)

⌨️ 快捷键说明

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