Siêu thị PDFTải ngay đi em, trời tối mất

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
MIỄN PHÍ
Số trang
20
Kích thước
233.0 KB
Định dạng
PDF
Lượt xem
955

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)))

Tải ngay đi em, còn do dự, trời tối mất!