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

📄 aes.cpp

📁 aes和des加密的小程序:可以加密文件
💻 CPP
📖 第 1 页 / 共 3 页
字号:
    temp[0] =        Te0[(byte)(w[0])] ^        Te1[(byte)(w[1] >>  8)] ^        Te2[(byte)(w[2] >> 16)] ^        Te3[(byte)(w[3] >> 24)];    temp[1] =        Te0[(byte)(w[1])] ^        Te1[(byte)(w[2] >>  8)] ^        Te2[(byte)(w[3] >> 16)] ^        Te3[(byte)(w[0] >> 24)];    temp[2] =        Te0[(byte)(w[2])] ^        Te1[(byte)(w[3] >>  8)] ^        Te2[(byte)(w[0] >> 16)] ^        Te3[(byte)(w[1] >> 24)];    temp[3] =        Te0[(byte)(w[3])] ^        Te1[(byte)(w[0] >>  8)] ^        Te2[(byte)(w[1] >> 16)] ^        Te3[(byte)(w[2] >> 24)];    for (i = 0; i < 4; i++)        w[i] = temp[i];}//逆向列混淆加上移位static void InvMixColumns_ShiftRows(word w[4]){    int i;    word temp[4];    temp[0] =        Td0[(byte)(w[0])] ^        Td1[(byte)(w[3] >>  8)] ^        Td2[(byte)(w[2] >> 16)] ^        Td3[(byte)(w[1] >> 24)];    temp[1] =        Td0[(byte)(w[1])] ^        Td1[(byte)(w[0] >>  8)] ^        Td2[(byte)(w[3] >> 16)] ^        Td3[(byte)(w[2] >> 24)];    temp[2] =        Td0[(byte)(w[2])] ^        Td1[(byte)(w[1] >>  8)] ^        Td2[(byte)(w[0] >> 16)] ^        Td3[(byte)(w[3] >> 24)];    temp[3] =        Td0[(byte)(w[3])] ^        Td1[(byte)(w[2] >>  8)] ^        Td2[(byte)(w[1] >> 16)] ^        Td3[(byte)(w[0] >> 24)];    for (i = 0; i < 4; i++)        w[i] = temp[i];}//逆向列混淆static void InvMixColumns(word w[4]){    int i;    word temp[4];    temp[0] =        Td0[(byte)(w[0])] ^        Td1[(byte)(w[0] >>  8)] ^        Td2[(byte)(w[0] >> 16)] ^        Td3[(byte)(w[0] >> 24)];    temp[1] =        Td0[(byte)(w[1])] ^        Td1[(byte)(w[1] >>  8)] ^        Td2[(byte)(w[1] >> 16)] ^        Td3[(byte)(w[1] >> 24)];    temp[2] =        Td0[(byte)(w[2])] ^        Td1[(byte)(w[2] >>  8)] ^        Td2[(byte)(w[2] >> 16)] ^        Td3[(byte)(w[2] >> 24)];    temp[3] =        Td0[(byte)(w[3])] ^        Td1[(byte)(w[3] >>  8)] ^        Td2[(byte)(w[3] >> 16)] ^        Td3[(byte)(w[3] >> 24)];    for (i = 0; i < 4; i++)        w[i] = temp[i];}//轮密钥加static void AddRoundKey(word w[4], const word key[4]){    w[0] ^= key[0];    w[1] ^= key[1];    w[2] ^= key[2];    w[3] ^= key[3];}//密钥扩展算法static void KeyExpansion(const byte key[16], word w[44]){    word temp;    int i;    for (i = 0; i < 4; i++) {/*         printf("%d\n", key[i]); */        w[i] = Byte2Word((byte *)&key[4*i]);/*         printf("%08X\n", w[i]); */    }    for (i = 4; i < 44; i++) {        temp = w[i-1];        if (i%4 == 0)            temp = SubWord(ROTWORD(temp)) ^ Rcon[i/4];        w[i] = w[i-4] ^ temp;    }}//AES加密函数void AES_encrypt(const byte in[16], byte out[16], const byte key[16]){    word state[4], temp[4], key_ex[44];    int i;    for (i = 0; i < 4; i++)        state[i] = Byte2Word(&in[i*4]);    KeyExpansion(key, key_ex);    AddRoundKey(state, &key_ex[0]);    for (i = 1; i < 10; i++) {        MixColumns_ShifRows(state);        AddRoundKey(state, &key_ex[i*4]);    }    temp[0] =        sbox[(byte)(state[0])] |        sbox[(byte)(state[1] >>  8)] <<  8 |        sbox[(byte)(state[2] >> 16)] << 16 |        sbox[(byte)(state[3] >> 24)] << 24;    temp[1] =        sbox[(byte)(state[1])] |        sbox[(byte)(state[2] >>  8)] <<  8 |        sbox[(byte)(state[3] >> 16)] << 16 |        sbox[(byte)(state[0] >> 24)] << 24;    temp[2] =        sbox[(byte)(state[2])] |        sbox[(byte)(state[3] >>  8)] <<  8 |        sbox[(byte)(state[0] >> 16)] << 16 |        sbox[(byte)(state[1] >> 24)] << 24;    temp[3] =        sbox[(byte)(state[3])] |        sbox[(byte)(state[0] >>  8)] <<  8 |        sbox[(byte)(state[1] >> 16)] << 16 |        sbox[(byte)(state[2] >> 24)] << 24;    AddRoundKey(temp, &key_ex[i*4]);    for (i = 0; i < 4; i++)        Word2Byte(temp[i], &out[i*4]);}//AES解密函数void AES_decrypt(const byte in[16], byte out[16], const byte key[16]){    word state[4], temp[4], key_ex[44];    int i;    for (i = 0; i < 4; i++)        state[i] = Byte2Word(&in[i*4]);    KeyExpansion(key, key_ex);    for (i = 1; i < 10; i++) {        InvMixColumns(&key_ex[i*4]);    }    AddRoundKey(state, &key_ex[10 * 4]);    for (i = 9; i > 0; i--) {        state[0] = InvSubWord(state[0]);        state[1] = InvSubWord(state[1]);        state[2] = InvSubWord(state[2]);        state[3] = InvSubWord(state[3]);        InvMixColumns_ShiftRows(state);        AddRoundKey(state, &key_ex[i*4]);    }    temp[0] =        invsbox[(byte)(state[0])] |        invsbox[(byte)(state[3] >>  8)] <<  8 |        invsbox[(byte)(state[2] >> 16)] << 16 |        invsbox[(byte)(state[1] >> 24)] << 24;    temp[1] =        invsbox[(byte)(state[1])] |        invsbox[(byte)(state[0] >>  8)] <<  8 |        invsbox[(byte)(state[3] >> 16)] << 16 |        invsbox[(byte)(state[2] >> 24)] << 24;    temp[2] =        invsbox[(byte)(state[2])] |        invsbox[(byte)(state[1] >>  8)] <<  8 |        invsbox[(byte)(state[0] >> 16)] << 16 |        invsbox[(byte)(state[3] >> 24)] << 24;    temp[3] =        invsbox[(byte)(state[3])] |        invsbox[(byte)(state[2] >>  8)] <<  8 |        invsbox[(byte)(state[1] >> 16)] << 16 |        invsbox[(byte)(state[0] >> 24)] << 24;    AddRoundKey(temp, &key_ex[i*4]);    for (i = 0; i < 4; i++)        Word2Byte(temp[i], &out[i*4]);}/* int main() *//* { *//*     byte a[16] = {0, 1, 2, 3, 4, 5, 6, 7, *//*                   8, 9, 10, 11, 12, 13, 14, 15}; *//*     word w[44]; *//*     word b[4] = {0x3d7c6ebd, 0x9e77b5f2, 0x6e21610b, 0x89b6108b}; *//*     byte key[16] = {0x2B, 0x7E, 0x15, 0x16, 0x28, 0xAE, 0xD2, 0xA6, *//*                     0xAB, 0xF7, 0x15, 0x88, 0x09, 0xCF, 0x4F, 0x3C }; *//*     int i; *//*     byte input[] = {0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, *//*                     0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff}; *//*     byte ckey[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, *//*                    0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f}; *//*     byte output[16]; *//*     clock_t start, finish; *//*     double duration; *//*     start = clock(); *//*     for (i = 0; i < 1000000; i++) *//*         AES_encrypt(input, output, ckey); *//*     finish = clock(); *//*     duration = (double)(finish - start) / CLOCKS_PER_SEC; *//*     printf("%lf\n", duration); *//*     for (i = 0; i < 16; i++) *//*         printf("%02x", output[i]); *//*     printf("\n"); */    /*     return 0; *//* } */

⌨️ 快捷键说明

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