
















Preview text:
lOMoAR cPSD| 58833082
ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
PHẠM KHÁNH LÂM - 24021145
BẢN BÁO CÁO BÀI TẬP LỚN
Ngành: Công nghệ kỹ thuật Cơ – Điện tử HÀ NỘI - 2025
ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
PHẠM KHÁNH LÂM - 24021145 lOMoAR cPSD| 58833082
BẢN BÁO CÁO BÀI TẬP LỚN
Ngành: Công nghệ kỹ thuật Cơ – Điện tử
Cán bộ hướng dẫn: Trần Thanh Hải HÀ NỘI - 2025
TÓM TẮT VÀ Ý NGHĨA CỦA ĐỀ TÀI
Trong khuôn khổ môn học, em được giao nhiệm vụ tự lựa chọn và thực
hiện một đề tài lập trình nhằm vận dụng kiến thức đã học vào xây dựng một
ứng dụng cụ thể. Sau khi cân nhắc và tham khảo nhiều hướng tiếp cận, em
quyết định chọn đề tài “Xây dựng chương trình mã hóa và giải mã văn bản
theo thuật toán RSA” vì tính thực tiễn và nền tảng lý thuyết thú vị mà nó mang lại.
Thuật toán RSA là một trong những phương pháp mã hóa khóa công khai
quan trọng và được ứng dụng rộng rãi trong lĩnh vực bảo mật thông tin. Qua
việc tìm hiểu và triển khai thuật toán này, em có cơ hội hiểu sâu hơn về cơ 1 lOMoAR cPSD| 58833082
chế hoạt động của RSA cũng như áp dụng kiến thức về số học và thuật toán
vào một chương trình cụ thể. Đồng thời, em xây dựng giao diện người dùng
bằng thư viện graphics.h, cho phép nhập liệu, hiển thị kết quả mã hóa/giải
mã có cuộn, và lưu kết quả ra tệp tin.
Việc tự lựa chọn và thực hiện đề tài này giúp em phát triển tư duy thuật
toán, khả năng tổ chức công việc, lập trình giao diện, và xử lý tương tác
người dùng. Đây là một trải nghiệm quý giá giúp em rèn luyện kỹ năng làm
việc độc lập, đồng thời tạo bước đệm vững chắc cho các đồ án và dự án lập
trình phức tạp hơn trong tương lai. 2 lOMoAR cPSD| 58833082 LỜI CAM ĐOAN
Chúng em xin cam đoan rằng tất cả các số liệu, dữ liệu và thông tin
được trình bày trong luận văn này là chân thực và chính xác nhất có thể theo
kiến thức của chúng em, và chúng em đã thực hiện tất cả các biện pháp cần
thiết để kiểm tra và xác minh tính đúng đắn của chúng. Chúng em cũng cam
đoan rằng tất cả các trình bày, phân tích và đánh giá đã được thực hiện một
cách cẩn thận và chính xác, và không có bất kỳ sai sót nào đáng kể xảy ra trong quá trình này. 3 lOMoAR cPSD| 58833082 NỘI DUNG
1. Giới thiệu (cần thiết bật trình dịch C++11)
1.1. Cách cài đặt DEV C++ và bật trình dịch C++11
1.2. Cách cài đặt thư viện Graphics.h 2. Lý do chọn đề tài
2.1. Lý do chọn thuật toán RSA
2.2. Lý do sử dụng thư viện Graphics.h
3. Mô tả quá trình xây dựng chương trình mã hóa/giải mã RSA
3.1. Thêm các thư viện cần thiết
3.2. Thiết kế giao diện người dùng
3.3. Cách xử lý nhập liệu văn bản có cuộn
3.4. Cách mã hóa văn bản bằng RSA
3.5. Cách giải mã văn bản bằng RSA
3.6. Cách hiển thị kết quả có scrollbar
3.7. Cách lưu kết quả giải mã vào tệp bằng hộp thoại Save As
4. Hướng dẫn sử dụng chương trình
4.1. Nhập văn bản cần mã hóa
4.2. Nhấn nút mã hóa để xem kết quả
4.3. Nhấn nút giải mã để khôi phục văn bản
4.4. Lưu văn bản giải mã vào file
5. Đánh giá chương trình
5.1. Tính đúng đắn của thuật toán
5.2. Tính thân thiện của giao diện
5.3. Tính mở rộng và khả năng nâng cấp 6. Kết luận
6.1. Những gì đã đạt được lOMoAR cPSD| 58833082
6.2. Hướng phát triển trong tương lai 4 5 lOMoAR cPSD| 58833082
1 . Giới thiệu
1.1 . Cách cài đặt DEV C++ và bật trình dịch C ++11
Truy cập trang https://sourceforge.net/projects/orwelldevcpp / để tải Dev-C++.
Cài đặt theo hướng dẫn mặc định.
Kiểm tra sau khi cài bằng cách tạo và chạy chương trình Hello World đơn giản.
Bật trình dịch C++11 theo các bước sau: 1. 2 . 6 lOMoAR cPSD| 58833082 7 lOMoAR cPSD| 58833082 3. 8 lOMoAR cPSD| 58833082 *Add thêm mục sau: -std=c++11 9 lOMoAR cPSD| 58833082
1.2 . Cách cài đặt thư viện Graphics.h
Tải thư viện WinBGIm từ trang: http://winbgim.codecutter.org /
Giải nén và chép các file như sau:
o graphics.h vào thư mục include/
o winbgim.h, winbgim.cpp vào include/
o libbgi. a vào thư mục lib/
Trong Dev-C++, vào menu Tools > Compiler Options > Linker và thêm dòng: 10 lOMoAR cPSD| 58833082
-lbgi -lgdi32 -lcomdlg32 -luuid -loleaut32 -lole32
2. Lý do chọn đề tài
2.1. Lý do chọn thuật toán RSA
- RSA là một trong những thuật toán mã hóa bất đối xứng phổ biến
nhất.- Dễ hiểu, có thể triển khai cơ bản bằng số nguyên và phép toán modulo.
- Mang lại ứng dụng thực tiễn trong bảo mật văn bản.
2.2. Lý do sử dụng thư viện Graphics.h
- `graphics.h` đơn giản, phù hợp với lập trình viên mới.
- Dễ dựng giao diện cơ bản mà không cần học GUI phức tạp.
- Có thể tạo textbox, nút bấm, vùng kết quả trực quan.
3. Mô tả quá trình xây dựng chương trình mã hóa/giải mã RSA
3.1. Thêm các thư viện cần thiết #include #include #include #include #include #include #include "rsa_utils.h" #include "utils.h" 11 lOMoAR cPSD| 58833082 #include #include #include
3.2. Thiết kế giao diện người dùng •
Tạo cửa sổ 1200x800 bằng initwindow. •
Dùng rectangle, bar, outtextxy để vẽ textbox, nút, tiêu đề. •
Vùng nhập văn bản ở trên cùng, hai vùng kết quả nằm bên dưới.
3.3. Cách xử lý nhập liệu văn bản có cuộn •
Mỗi textbox có con trỏ và vị trí cuộn (scroll offset). •
Khi gõ dài quá giới hạn, tự xuống dòng và cuộn. •
Mã: drawInputBox() + biến scroll_offset, cursor_index trong gui.h
3.4. Cách mã hóa văn bản bằng RSA •
Hàm encrypt(text, e, n) chuyển từng ký tự thành số, mã hóa modulo.
string encrypt(const string& msg, int e, int n)
{ string res; for (char c : msg) { int m = (int)c; int ciph = modPow(m, e, n);
res += to_string(ciph) + " "; } return res; }
3.5. Cách giải mã văn bản bằng RSA •
Hàm decrypt(cipher, d, n) đọc chuỗi số, giải mã rồi chuyển thành ký tự.
string decrypt(const string& data, int d, int n) 10 { istringstream iss(data);
string resDownloaded by Trang Lê (letrang23091909@gmail.com); while (iss >> ciph) { lOMoAR cPSD| 58833082
3. 6 . Cách hiển thị kết quả có scrollbar
Dùng drawScrollArea() để vẽ khung kết quả.
Khi kết quả dài, chia thành các dòng bằng splitText() và vẽ từng dòng với vị trí scroll.
3.7 . Cách lưu kết quả giải mã vào tệp bằng hộp thoại Save As
string showSaveFileDialog(); // Trả về đường dẫn người dùng chọn void saveToFile s
( tring path, string content); // Ghi nội dung vào file
4 . Hướng dẫn sử dụng chương trình
4.1 . Nhập văn bản cần mã hóa
Nhấn vào ô văn bản trên cùng, gõ nội dung cần mã hóa.
4.2 . Nhấn nút mã hóa để xem kết quả
Nhấn nút "Mã hóa" để xem vùng kết quả bên trái hiện ra chuỗi số mã hóa.
4.3 . Nhấn nút giải mã để khôi phục văn bản
Nhấn nút "Giải mã", vùng bên phải hiển thị văn bản gốc.
4.4 . Lưu văn bản giải mã vào file
Sau khi giải mã, chọn nút "Lưu" hoặc nhấn phím tương ứng.
Hộp thoại Save As hiện ra để chọn nơi lưu file .txt. .
5 Đánh giá chương trình
5.1 . Tính đúng đắn của thuật toán
Đã kiểm thử với nhiều văn bản, mã hóa và giải mã khớp.
5.2 . Tính thân thiện của giao diện
Dễ sử dụng, thao tác đơn giản với chuột.
Giao diện có textbox cuộn và hiệu ứng mượt.
5.3. Tính mở rộng và khả năng nâng cấp •
Có thể mở rộng hỗ trợ đọc/ghi file đầu vào. •
Có thể thay graphics.h bằng GUI hiện đại hơn (Qt, SDL...). 6. Kết luận
6.1. Những gì đã đạt được •
Xây dựng thành công chương trình mã hóa/giải mã RSA. •
Giao diện đồ họa hoạt động ổn định. •
Áp dụng kiến thức thuật toán và lập trình thực tế.
6.2. Hướng phát triển trong tương lai
Hỗ trợ mã hóa file nhị phân. •
Thêm giao diện nhiều chủ đề, font chữ. •
Nâng cấp thuật toán xử lý văn bản dài bằng block RSA hoặc hybrid RSA-AES. •
Giao tiếp giữa 2 người sử dụng RSA. 12