Thư viện tri thức trực tuyến
Kho tài liệu với 50,000+ tài liệu học thuật
© 2023 Siêu thị PDF - Kho tài liệu học thuật hàng đầu Việt Nam

Chương trình C/C++ Mã hóa và giải mã thuật toán AES bằng Sbox động
Nội dung xem thử
Mô tả chi tiết
1
Mục lục
1. Chức năng chương trình.........................................................................1
2. Cấu trúc chương trình.............................................................................1
Sbox.h.........................................................................................................2
Sbox.cpp.....................................................................................................2
AES.cpp......................................................................................................6
Test.txt......................................................................................................19
1. Chức năng chương trình
Chương trình gồm 3 chức năng chính:
- Tạo Sbox động bằng sự thay đổi của đa thức bất khả quy
- Mã hóa bản rõ bằng thuật toán AES với khóa: 128, 192 và 256 bit
- Giải mã bằng thuật toán AES với khóa: 128, 192 và 256 bit
** Mã hóa và giải mã AES sử dụng Sbox động được tạo từ chức năng 1
thay vì Sbox tĩnh thường dùng để nâng cao độ an toàn của thuật toán.
1. Cấu trúc chương trình
- Sbox.h: Thư viện định nghĩa các hàm của file Sbox.cpp
- Sbox.cpp: Viết các hàm menu, hàm kiểm tra đầu vào, hàm tạo sbox
động.
- AES.cpp: Bao gồm hàm mã hóa và giải mã AES
- Test.txt: Bao gồm 1 ví dụ về khóa 128, 192, 256 bit và bản rõ để chạy
chương trình
2
************************ Mã nguồn C/C++********************
Sbox.h
#include <cstdio>
#include <stdint.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <io.h>
#include <direct.h>
#include <iostream>
#include <time.h>
typedef unsigned char uc;
void initialize(short irrPol,uc sbox[16*16]);
uc msb(unsigned short num);
uc divide(unsigned short a, uc b, uc &r);
uc multiply(uc a, uc b);
uc inverse(uc b,short irrPol);
uc map (uc a);
int s_box_gen(short irrPol,uc sbox[16*16]);
void inv_s_box_gen(uc sbox[16*16],uc invsbox[16*16]);
int generate_sbox(uc Key[], uc sbox[16*16], int Key_len);
void menu();
int chon();
int checkinput(char input[]);
int checkkey(char input[]);
Sbox.cpp
#include "sbox.h"
// Khởi tạo Sbox
void initialize(short irrPol, uc sbox[16 * 16])
{
uc i, j;
for (i = 0; i <= 0xF; i++)
{
for (j = 0; j <= 0xF; j++)
{
sbox[i * 16 + j] = inverse((i << 4) + j, irrPol); // tìm giá trị nghịch
đa.o cu.a input
}
}
}
// Tra. về vị trí cao nhất có giá trị khác 0
uc msb(unsigned short num)
{
uc i;
for (i = 0; i <= 8; i++)
{
if (!(num >> (i + 1)))