AES加解密演算法理解與實現(ecb模式) C語言

2021-09-24 22:41:37 字數 2224 閱讀 6916

#include #include #include void aes(char*, char*, char*, int);

void aes_detail(int[4][4], int[4][4], int);

void subbytes(int [4][4], int);

void shiftrows(int [4][4], int);

void mixcolumns(int [4][4], int);

void addroundkey(int [4][4], int[4][4]);

int aes_multiple(int, int);

void keyexpansion(int key[4][4], int w[11][4][4]);

int c2i(char );

/** * s盒

*/static const int s_box[16][16] = ;

/** * 逆s盒

*/static const int inverse_s_box[16][16] = ;

int rc[10] = ;

int main()

void aes(char* source_path, char* des_path, char* password, int method)

}file *file = fopen(source_path, "r"); //獲取檔案的指標

fseek(file, 0, seek_end); //移動檔案的指標到檔案結尾

int len = ftell(file); //獲取檔案的長度

rewind(file); //將檔案指標移動回檔案開始

// 如果檔案長度不是128位(16位元組)的整數倍,則補齊

int size = len;

if (len % 16 != 0)

unsigned char content[size];

//讀取檔案內容賦值給content

fread(content, 1, len, file);

for (int j = len; j < size; ++j)

fclose(file);

//儲存結果

unsigned char encry[size];

//將檔案轉換成16位元組的int型陣列加密、解密

for (int i = 0; i < size / 16; ++i)

}aes_detail(content_to_int, p, method);

for (int j = 0; j < 4; ++j) }}

file *file1 = fopen(des_path, "w");

fwrite(encry, size, 1, file1);

fflush(file1);

fclose(file1);

}void aes_detail(int content[4][4], int password[4][4], int encode)

addroundkey(content, p[i]);

}}else }}

}void subbytes(int a[4][4], int encode)

}}void shiftrows(int a[4][4], int encode) else}}

}void mixcolumns(int a[4][4], int encode)else

}}void addroundkey(int a[4][4], int k[4][4])

}}//aes乘法計算

int aes_multiple(int a, int le)

b = b % 256;

result = result ^ b;

}if (sec)

b = b % 256;

result = result ^ b;

}if (fir)

if (fir_mod)

result = result ^ a;

return result;

}void keyexpansion(int key[4][4], int w[11][4][4])

}for (int i = 1; i < 11; ++i)

}} else

for (int l = 0; l < 4; ++l) }}

}//將字元轉換為數值

int c2i(char ch)

AES加解密演算法的模式介紹

一般的加密通常都是塊加密,如果要加密超過塊大小的資料,就需要涉及填充和鏈加密模式,文中提到的ecb和cbc等就是指鏈加密模式。這篇文件比較形象地介紹了aes加密演算法中的一些模式 過來。注意,還缺一種ctr的模式。同時在文章的最後,貼出幾對利用ecb and cbc模式得標準演算法得到的碼流串。對稱...

golang使用aes庫實現加解密

golang實現加密解密的庫很多,這裡使用的是aes庫 base64庫來實現.使用時,需要指定乙個私鑰,來進行加解密,這裡指定是 var aeskey byte 321423u9y8d2fwfl 上 package main import fmt crypto cipher crypto aes b...

Python3實現AES加解密

import base64 from crypto.cipher import aes from urllib.parse import unquote 採用aes對稱加密演算法 str不是16的倍數那就補足為16的倍數 def add to 16 value while len value 16 ...