亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? aes的c++實現(128位密鑰).txt

?? AES的C++實現(128位密鑰) 寫了一個AES的C++實現
?? TXT
?? 第 1 頁 / 共 2 頁
字號:
AES的C++實現(128位密鑰)


作者:Veiz      來源:     發表時間:2006-06-19     瀏覽次數: 2397      字號:大  中  小
//  寫了一個AES的C++實現,僅支持128位密鑰, 寫得匆忙,不夠規范,僅供參考。

//    AES.h

#ifndef AES_H_
#define AES_H_

#include <bitset>
#include <utility>

using namespace std;

class AES
{
public:
    typedef unsigned char    byte;
    static const int KEY_SIZE = 16;    //    密鑰長度為128位
    static const int N_ROUND = 11;
    byte plainText[16];    //    明文
    byte state[16];    //    當前分組。
    byte cipherKey[16];    //    密鑰
    byte roundKey[N_ROUND][16];    //輪密鑰
    byte cipherText[16];    //密文
    byte SBox[16][16];    //    S盒
    byte InvSBox[16][16];    //    逆S盒    
    void EncryptionProcess();    
    void DecryptionProcess();
    void Round(const int& round);
    void InvRound(const int& round);
    void FinalRound();
    void InvFinalRound();
    void KeyExpansion();
    void AddRoundKey(const int& round);    
    void SubBytes();    
    void InvSubBytes();
    void ShiftRows();    
    void InvShiftRows();
    void MixColumns();    
    void InvMixColumns();
    void BuildSBox();
    void BuildInvSBox();
    void InitialState(const byte* text);
    void InitialCipherText();    
    void InitialplainText();        
    byte GFMultplyByte(const byte& left, const byte& right);
    const byte* GFMultplyBytesMatrix(const byte* left, const byte* right);
public:    
    AES();    
    const byte* Cipher(const byte* text, const byte* key, const int& keySize);    
    const byte* InvCipher(const byte* text, const byte* key, const int& keySize);
};


void AES::EncryptionProcess()
{    //    加密過程
    InitialState(plainText);
    KeyExpansion();    //    密鑰擴展
    AddRoundKey(0);    //    輪密鑰加
    for(int i = 1; i < N_ROUND-1; ++i)
    {            
        Round(i);
    }
    FinalRound();
    InitialCipherText();
}

void AES::DecryptionProcess()
{    //    解密過程
    InitialState(cipherText);
    KeyExpansion();
    InvFinalRound();
    for(int i = N_ROUND-2; i > 0 ; --i)
    {            
        InvRound(i);
    }
    AddRoundKey(0);
    InitialplainText();
}

void AES::Round(const int& round)
{    //    正常輪
    SubBytes();
    ShiftRows();
    MixColumns();
    AddRoundKey(round);        
}

void AES::InvRound(const int& round)
{    //    正常輪的逆
    AddRoundKey(round);    
    InvMixColumns();
    InvShiftRows();
    InvSubBytes();            
}

void AES::FinalRound()
{    //    最后輪
    SubBytes();
    ShiftRows();
    AddRoundKey(N_ROUND - 1);
}

void AES::InvFinalRound()
{    //    最后輪的逆
    AddRoundKey(N_ROUND - 1);        
    InvShiftRows();
    InvSubBytes();        
}

void AES::KeyExpansion()
{    //    密鑰擴展
    const byte rcon[N_ROUND][4] = { 
        {0x00, 0x00, 0x00, 0x00},  
        {0x01, 0x00, 0x00, 0x00},
        {0x02, 0x00, 0x00, 0x00},
        {0x04, 0x00, 0x00, 0x00},
        {0x08, 0x00, 0x00, 0x00},
        {0x10, 0x00, 0x00, 0x00},
        {0x20, 0x00, 0x00, 0x00},
        {0x40, 0x00, 0x00, 0x00},
        {0x80, 0x00, 0x00, 0x00},
        {0x1b, 0x00, 0x00, 0x00},
        {0x36, 0x00, 0x00, 0x00} };        
        for(int i = 0; i < 16; ++i)
        {
            roundKey[0][i] = cipherKey[i];
        }
        for(int i = 0; i < 4; ++i)
        {    //  roundKey[0][16]為cipherKey的轉置矩陣
            for(int j = 0; j < 4; ++j)
            {
                roundKey[0][4*i + j] = cipherKey[4*j + i];
            }
        }
        for(int roundIndex = 1; roundIndex < N_ROUND; ++roundIndex)
        {
            byte rotWord[4] = {0x00};
            rotWord[0] = roundKey[roundIndex - 1][3];
            rotWord[1] = roundKey[roundIndex - 1][7];
            rotWord[2] = roundKey[roundIndex - 1][11];
            rotWord[3] = roundKey[roundIndex - 1][15];
            std::swap<byte>(rotWord[0], rotWord[1]);
            std::swap<byte>(rotWord[1], rotWord[2]);
            std::swap<byte>(rotWord[2], rotWord[3]);        
            for(int i = 0; i < 4; ++i)
            {
                rotWord[i] = SBox[ rotWord[i] >> 4][ rotWord[i] & 0x0f ];
                roundKey[roundIndex][4*i] = roundKey[roundIndex - 1][4*i] ^ rotWord[i] ^ rcon[roundIndex][i];
            }
            for(int j = 1; j < 4; ++j)
            {
                for(int i = 0; i < 4; ++i)
                {
                    roundKey[roundIndex][4*i + j] = roundKey[roundIndex - 1][4*i + j] ^ roundKey[roundIndex][4*i + j - 1];
                }
            }
        }
}

void AES::AddRoundKey(const int& round)
{    //    輪密鑰加
    for(int i = 0; i < 16; ++i)
    {    //    利用當前分組state和第round組擴展密鑰進行按位異或
        state[i] ^= roundKey[round][i];
    }
}

void AES::SubBytes()
{    //    字節代換
    for(int i = 0; i < 16; ++i)
    {
        state[i] = SBox[ state[i] >> 4][ state[i] & 0x0f ];
    }
}

void AES::InvSubBytes()
{    //    逆字節代換
    for(int i = 0; i < 16; ++i)
    {
        state[i] = InvSBox[ state[i] >> 4][ state[i] & 0x0f ];
    }
}

void AES::ShiftRows()
{    //    行變換
    //state第一行保持不變
    // Do nothing.
    //state第二行循環左移一個字節
    std::swap<byte>(state[4], state[5]);
    std::swap<byte>(state[5], state[6]);
    std::swap<byte>(state[6], state[7]);        
    //state第三行循環左移兩個字節
    std::swap<byte>(state[8], state[10]);
    std::swap<byte>(state[9], state[11]);
    //state第三行循環左移三個字節
    std::swap<byte>(state[14], state[15]);
    std::swap<byte>(state[13], state[14]);
    std::swap<byte>(state[12], state[13]);    
}

void AES::InvShiftRows()
{    //    行變換反演
    //state第一行保持不變
    // Do nothing.
    //state第二行循環右移一個字節
    std::swap<byte>(state[6], state[7]);
    std::swap<byte>(state[5], state[6]);
    std::swap<byte>(state[4], state[5]);        
    //state第三行循環右移兩個字節
    std::swap<byte>(state[9], state[11]);
    std::swap<byte>(state[8], state[10]);
    //state第三行循環右移三個字節
    std::swap<byte>(state[12], state[13]);
    std::swap<byte>(state[13], state[14]);        
    std::swap<byte>(state[14], state[15]);    
}

void AES::MixColumns()
{    //    列混淆
    byte matrix[4][4] = {
        {0x02, 0x03, 0x01, 0x01},
        {0x01, 0x02, 0x03, 0x01},
        {0x01, 0x01, 0x02, 0x03},
        {0x03, 0x01, 0x01, 0x02}};
        const byte* temp = GFMultplyBytesMatrix((byte*)matrix, state);
        for(int i = 0; i < 16; ++i)
        {
            state[i] = temp[i];
        }
        delete[] temp;
}

void AES::InvMixColumns()
{    //    列混淆反演
    byte matrix[4][4] = {
        {0x0e, 0x0b, 0x0d, 0x09},
        {0x09, 0x0e, 0x0b, 0x0d},
        {0x0d, 0x09, 0x0e, 0x0b},
        {0x0b, 0x0d, 0x09, 0x0e} };
        const byte* temp = GFMultplyBytesMatrix((byte*)matrix, state);
        for(int i = 0; i < 16; ++i)
        {
            state[i] = temp[i];
        }
        delete[] temp;
}

void AES::BuildSBox()
{    //    構建S盒
    byte box[16][16] = 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色综合激情久久| 日韩一卡二卡三卡四卡| 国产精品一区二区久久不卡| 中文字幕一区二区三区四区不卡| 欧美一区在线视频| 日韩精品电影一区亚洲| 日韩专区一卡二卡| 久久aⅴ国产欧美74aaa| 粉嫩av亚洲一区二区图片| 成人的网站免费观看| 在线亚洲精品福利网址导航| 97久久超碰国产精品电影| 国产成都精品91一区二区三| 99精品国产99久久久久久白柏| 日韩精品一区二区三区在线 | 日韩一级成人av| 欧美成人伊人久久综合网| 久久精品欧美一区二区三区不卡 | 欧美日韩免费高清一区色橹橹| 中文字幕在线不卡视频| 欧美韩日一区二区三区| 污片在线观看一区二区| 国产精品原创巨作av| 欧美精品成人一区二区三区四区| 青青青爽久久午夜综合久久午夜| 欧美中文字幕不卡| 久久久久国产精品免费免费搜索| 99久久精品免费观看| 26uuu久久天堂性欧美| 玉足女爽爽91| 色哟哟国产精品| 综合色中文字幕| 国产91精品一区二区麻豆亚洲| 青青草原综合久久大伊人精品| 欧美国产一区二区| 日韩精品久久理论片| 亚洲精品在线电影| 91在线视频官网| 九九九精品视频| 日韩一区在线免费观看| 91亚洲资源网| 国产精品系列在线观看| 亚洲欧美一区二区久久 | 欧美一区二区三区免费在线看| 免费一级欧美片在线观看| 久久国产生活片100| 久久久精品影视| 日韩 欧美一区二区三区| 欧美一区二区福利视频| 国产麻豆精品在线观看| 亚洲欧美区自拍先锋| 欧美群妇大交群中文字幕| 精品系列免费在线观看| 中文字幕中文在线不卡住| 在线亚洲欧美专区二区| 秋霞电影一区二区| 久久久精品黄色| 欧美亚日韩国产aⅴ精品中极品| 精品视频免费看| 成人午夜av影视| 日本在线不卡视频| 亚洲视频在线一区| 久久久久久久综合日本| 欧美色欧美亚洲另类二区| 国产丶欧美丶日本不卡视频| 亚洲午夜久久久久久久久电影网| 日本不卡不码高清免费观看| 日本一区二区三区四区在线视频| 亚洲午夜精品17c| 亚洲欧美日韩国产综合| 国产亚洲成年网址在线观看| 欧美综合色免费| 成人综合在线视频| 国产一区二区三区综合| 久久国产人妖系列| 色妹子一区二区| 狠狠色丁香久久婷婷综合丁香| 久久精品国产网站| 日韩欧美高清一区| 国产一区二区三区免费| 欧美xxxxxxxxx| 欧美在线观看18| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 亚洲观看高清完整版在线观看| 亚洲国产精品视频| 亚洲色图在线看| 亚洲国产高清在线观看视频| 久久无码av三级| 中文字幕精品一区二区精品绿巨人| 久久 天天综合| 日韩国产欧美三级| 国产麻豆一精品一av一免费| 国产成人av电影在线播放| k8久久久一区二区三区| 成人精品鲁一区一区二区| 97久久精品人人澡人人爽| 91国产精品成人| 精品美女一区二区| 久久嫩草精品久久久精品一| 中文字幕不卡的av| 午夜视频一区在线观看| 国产一区二区三区免费观看| 99精品视频免费在线观看| 欧美三级日韩三级| 国产精品免费aⅴ片在线观看| 欧美日韩亚洲综合在线| 精品国产区一区| 一区二区三区.www| 国产一区美女在线| 色综合天天综合网国产成人综合天| 一区二区三区在线影院| 狠狠色2019综合网| 91黄色激情网站| 国产精品美女一区二区| 香蕉av福利精品导航| 91亚洲精品久久久蜜桃网站| 欧美一区二区三区四区在线观看| 99久久免费精品高清特色大片| 亚洲一区二区三区小说| 福利电影一区二区| 日韩欧美久久久| 日本伊人色综合网| 91精品一区二区三区久久久久久| 国模冰冰炮一区二区| 欧美三级日韩三级国产三级| 久久影音资源网| 免费久久精品视频| 欧美巨大另类极品videosbest | 欧美色综合久久| 中文字幕日韩欧美一区二区三区| 久久久高清一区二区三区| 亚洲1区2区3区视频| 欧美色综合网站| 免费成人av在线| 久久综合中文字幕| 成人午夜视频在线| 亚洲欧洲日韩在线| 欧美色电影在线| 秋霞av亚洲一区二区三| 精品成人一区二区三区| 国产91精品在线观看| 亚洲精品视频在线观看网站| 欧美羞羞免费网站| 韩国视频一区二区| 亚洲欧美一区二区三区国产精品 | 久久综合色综合88| 成人午夜免费av| 亚洲国产综合在线| 久久影院视频免费| 欧美日韩亚洲高清一区二区| 韩国在线一区二区| 亚洲视频资源在线| 久久久噜噜噜久噜久久综合| aa级大片欧美| 久久精品国产久精国产爱| √…a在线天堂一区| 日韩一区二区三| 97精品久久久久中文字幕| 久久精品国产在热久久| 亚洲妇女屁股眼交7| 欧美激情一区二区在线| 欧美激情综合网| 亚洲欧美偷拍三级| 久久精品99国产国产精| 欧美国产日本视频| 欧美一区二区三区免费在线看| 中文字幕一区视频| 国产精品国产三级国产aⅴ无密码| 免费不卡在线观看| 精品一区二区三区av| av亚洲精华国产精华精华| 成人av电影在线观看| 欧美日韩三级视频| 2023国产一二三区日本精品2022| av在线不卡免费看| 欧美日韩高清一区二区三区| 欧美三级电影一区| 精品国产污污免费网站入口| 国产精品久久久久影院亚瑟| 午夜不卡av在线| 成人av在线看| 欧美日韩精品一区二区三区| 久久精品一区蜜桃臀影院| 最近中文字幕一区二区三区| 亚洲高清免费视频| 国产91富婆露脸刺激对白| 欧美性大战久久| 久久无码av三级| 五月天欧美精品| 91女厕偷拍女厕偷拍高清| 精品三级av在线| 亚洲一区二区三区视频在线 | 久久亚洲一区二区三区明星换脸 | 欧美老女人第四色| 国产精品国产成人国产三级| 五月天一区二区三区| 色94色欧美sute亚洲线路一ni| 国产mv日韩mv欧美| 国产日产欧美一区二区三区| 狠狠色狠狠色综合系列|