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
1527

Tài liệu đang bị lỗi

File tài liệu này hiện đang bị hỏng, chúng tôi đang cố gắng khắc phục.

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!