Tổng hợp những câu hỏi cần thiết và quan trọng của môn Cơ sở an toàn và bảo mật thông tin (KMA). Tài liệu này giúp các bạn sinh viên có thể vượt qua các bài kiểm tra giữa kỳ, cuối kỳ và đạt kết quả cao nhất. Xin cảm ơn các bạn đã xem và tải tài liệu.
TỔNG QUAN VỀ AN TOÀN VÀ BẢO MẬT THÔNG TIN
Giới thiệu về an toàn và bảo mật thông tin
An toàn thông tin là quá trình bảo vệ thông tin khỏi các nguy cơ như truy cập trái phép, sử dụng không đúng cách, sửa đổi trái phép, lộ thông tin hay mất mát thông tin
Bảo mật thông tin là việc áp dụng các biện pháp bảo vệ thông tin khỏi những nguy cơ như truy cập trái phép, sử dụng không đúng cách, sửa đổi trái phép, lộ thông tin hay mất mát thông tin bằng cách sử dụng các biện pháp kỹ thuật, quản lý và tổ chức Ý nghĩa và tầm quan trọng của an toàn và bảo mật thông tin trong môi trường kỹ thuật số ngày nay:
✓ Bảo vệ dữ liệu quan trọng: An toàn và bảo mật thông tin là cách chính để bảo vệ dữ liệu quan trọng của tổ chức, bao gồm thông tin về khách hàng, thông tin tài chính, và dữ liệu nhạy cảm khác
✓ Bảo vệ danh tiếng và uy tín: Sự mất mát hoặc lộ thông tin có thể gây ra thiệt hại nghiêm trọng cho danh tiếng và uy tín của tổ chức, ảnh hưởng đến mối quan hệ với khách hàng, đối tác và cộng đồng
✓ Tuân thủ quy định và luật pháp: Trong một số lĩnh vực như y tế, tài chính hoặc dịch vụ tài chính, tuân thủ các quy định về bảo mật thông tin là bắt buộc pháp lý Việc không tuân thủ có thể gây ra hậu quả pháp lý nghiêm trọng cho tổ chức
✓ Phòng ngừa rủi ro: An toàn và bảo mật thông tin giúp tổ chức nhận biết, đánh giá và quản lý các rủi ro liên quan đến dữ liệu của họ, từ đó giảm thiểu nguy cơ phát sinh các sự cố bảo mật và mất mát thông tin
✓ Tăng cường niềm tin từ khách hàng: Khi tổ chức có các biện pháp bảo mật thông tin hiệu quả, điều này tạo ra niềm tin và sự tự tin từ phía khách hàng, giúp tăng cường mối quan hệ và tạo điều kiện cho sự phát triển bền vững của tổ chức
✓ Hỗ trợ trong phát triển kinh doanh: An toàn và bảo mật thông tin có thể được xem là một lợi thế cạnh tranh, khi tổ chức có thể sử dụng nó để thu hút khách hàng mới, tăng cường tương tác với khách hàng hiện tại và mở rộng hoạt động kinh doanh quốc tế
Tổng quan về mã hoá và giải mã
Mã hóa là quá trình chuyển đổi thông tin từ dạng ban đầu (plaintext) thành một dạng khác gọi là mã hóa (ciphertext) thông qua sử dụng một thuật toán mã hóa và một khóa Mục đích chính của mã hóa là bảo vệ thông tin khỏi sự truy cập trái phép bằng cách làm cho dữ liệu không thể đọc được hoặc hiểu được nếu không có khóa giải mã
Trong mã hóa đối xứng, cùng một khóa được sử dụng cho cả quá trình mã hóa và giải mã, trong khi trong mã hóa khóa công khai, có hai khóa được sử dụng, một là khóa công khai để mã hóa và một là khóa bí mật để giải mã
Giải mã là quá trình ngược lại của mã hóa, nơi dữ liệu đã được mã hóa được chuyển đổi từ dạng mã hóa trở lại dạng ban đầu (plaintext) thông qua sử dụng một thuật toán giải mã và khóa tương ứng Mục đích của giải mã là khôi phục dữ liệu gốc từ dữ liệu đã được mã hóa để có thể đọc hoặc hiểu nó
Khóa giải mã cần phải khớp với khóa đã sử dụng trong quá trình mã hóa để tái tạo lại thông tin gốc Trong mã hóa đối xứng, cùng một khóa được sử dụng cho cả quá trình mã hóa và giải mã Trong mã hóa khóa công khai, khóa công khai được sử dụng để mã hóa và khóa bí mật được sử dụng để giải mã.
Tổng quan về thuật toán DES
1.3.1 Giới thiệu về chuẩn mã dữ liệu DES (Data Encryption Standard)
1.3.1.1 Giới thiệu chung về DES
Vào ngày 13/5/1973, Ủy ban Quốc gia về Tiêu chuẩn của Mỹ đã đưa ra yêu cầu về hệ mật mã áp dụng trên toàn quốc, đánh dấu một bước quan trọng trong lịch sử của an ninh mạng và bảo mật thông tin Điều này đã mở ra cánh cửa cho việc phát triển chuẩn mã hóa dữ liệu, với DES (Data Encryption Standard) là một trong những kết quả quan trọng nhất của quyết định này
Ban đầu, DES được phát triển bởi IBM dựa trên hệ mã Lucifer, một hệ mã được tạo ra bởi Horst Feistel và đồng nghiệp tại IBM Sau đó, vào năm 1975, DES đã được công bố và xác nhận là chuẩn mã hóa dữ liệu cho các ứng dụng trên toàn quốc
Với kích thước khóa 56 – bit và một loạt các phép hoán vị và thay thế phức tạp, DES đã trở thành một phần của nền móng của an ninh mạng và bảo mật thông tin Dù đã trải qua thời gian và bị thay thế bởi các chuẩn mã hóa mạnh mẽ hơn về sau do kích thước khóa ngắn, DES vẫn đóng vai trò quan trọng trong lịch sử của mã hóa và có ảnh hưởng sâu rộng đến các phát triển trong lĩnh vực này
Với sự công nhận của DES là chuẩn mã hóa dữ liệu quốc gia, người ta đã thấy sự nhận thức và sự chú ý tăng lên đối với việc bảo vệ thông tin quan trọng và cá nhân Điều này đã thúc đẩy sự phát triển của các phương pháp mã hóa và giải mã tiên tiến hơn, đặt nền tảng cho việc bảo vệ thông tin trong môi trường kỹ thuật số ngày nay
1.3.1.2 Đặc điểm của thuật toán DES
Thuật toán DES (Data Encryption Standard) là một thuật toán mã hóa khối, được thiết kế để bảo vệ dữ liệu bằng cách chuyển đổi các khối dữ liệu có kích thước
64 bit thành các khối mã hóa tương ứng, cũng có kích thước 64 bit Dưới đây là một số đặc điểm quan trọng của DES:
✓ Kích thước khối: DES mã hóa dữ liệu theo cách khối, với mỗi khối dữ liệu có kích thước 64 bit
✓ Kích thước khóa: Mặc dù DES sử dụng khóa có tổng cộng 64 bit, chỉ có 56 bit thực sự được sử dụng cho việc mã hóa và giải mã 8 bit còn lại được sử dụng cho các mục đích kiểm tra
✓ Bản mã đầu ra: Kết quả của quá trình mã hóa DES là một khối dữ liệu mã hóa có kích thước 64 bit
✓ Số vòng: DES thực hiện quá trình mã hóa thông qua 16 vòng lặp, mỗi vòng lặp sử dụng một hàm hoán vị và thay thế phức tạp
✓ Mã hóa và giải mã: DES sử dụng cùng một khóa cho cả quá trình mã hóa và giải mã Điều này đơn giản hóa quá trình triển khai và sử dụng DES
✓ Thiết kế phần cứng: DES được thiết kế để chạy trên phần cứng, điều này đảm bảo hiệu suất cao và tốc độ xử lý nhanh chóng trong việc mã hóa và giải mã dữ liệu
Với các đặc điểm này, DES đã trở thành một trong những chuẩn mã hóa quan trọng và phổ biến nhất trong lịch sử của an ninh mạng và bảo mật thông tin, mặc dù nó đã bị thay thế bởi các thuật toán mã hóa mạnh mẽ hơn do kích thước khóa ngắn
1.3.1.3.1 Lưu đồ thuật toán mã hoá
Hình 1.1 Giải thuật mã hoá DES
Thuật toán DES được sử dụng để mã hóa và giải mã các block (khối) dữ liệu
64 bit dựa trên một key (khóa mã) 64 bit Các block được đánh số thứ tự bit từ trái sang phải và bắt đầu từ 1, bit đầu tiên bên trái là bit số 1 và bit cuối cùng bên phải là bit số 64 Quá trình giải mã và mã hóa sử dụng cùng một key nhưng thứ tự phân phối các giá trị các bit key của quá trình giải mã ngược với quá trình mã hóa
Một block dữ liệu sẽ được hoán vị khởi tạo (Initial Permutation) IP trước khi thực hiện tính toán mã hóa với key Cuối cùng, kết quả tính toán với key sẽ được hoán vị lần nữa để tạo ra, đây là hoán vị đảo của hoán vị khởi tạo gọi là (Inverse Initial Permutation) IP-1 Việc tính toán dựa trên key được định nghĩa đơn giản trong một hàm f, gọi là hàm mã hóa, và một hàm KS, gọi là hàm phân phối key (key schedule) Hàm KS là hàm tạo ra các khóa vòng (round key) cho các lần lặp mã hóa
Có tất cả 16 khóa vòng từ K1 đến K16
1.3.1.3.2 Hoán vị khởi tạo -IP
Hoán vị là thay đổi ví trí các bit trong một chuỗi giá trị nhưng không làm thay đổi giá trị của các bit này Đây là bước đầu tiên trong quy trình mã hóa dữ liệu 64 bit dữ liệu đầu vào, gọi là plaintext, sẽ được hoán vị theo bảng mô tả sau đây
Hình 1.2 Sơ đồ hoán vị khởi tạo, ký hiệu IP
Chuỗi bit đầu vào được đánh số từ 1 đến 64 (tính từ trái qua phải) Sau đó, các bit này được thay đổi vị trí như sơ đồ IP, bit số 58 được đặt vào vị trí đầu tiên, bit số
50 được đặt vào vị trí thứ 2 Cứ như vậy, bit thứ 7 được đặt vào vị trí cuối cùng
Sau hoán vị, chuỗi bit mới được phân ra làm hai đoạn, mỗi đoạn 32 bit để bắt đầu vào quy trình tính toán mã hóa với key Đoạn bên trái ký hiệu là L, đoạn bên phải ký hiệu là R Đoạn L gồm các bit từ bit số 1 đến bit số 32, đoạn R gồm các bit từ bit số 33 đến bit số 64 Đoạn L của lần tính toán sau sẽ chính là đoạn R của lần tính toán
7 trước Đoạn R của lần tính toán sau sẽ được tính từ đoạn R trước đó qua hàm mã hóa f(R, K) rồi XOR với đoạn L của lần tính trước đó
Hình 1.3 Tính toán hàm mã hoá f(R,K) Đầu tiên, 32 bit của đoạn R được đánh số từ 1 đến 32 theo thứ tự từ trái qua phải Giá trị này sẽ được chuyển đổi thông qua bảng tra E để tạo thành một giá trị 48
8 bit Bit đầu tiên trong chuỗi giá trị 48 bit là bit số 32 của R, bit thứ 2 là bit số 1 của
R, bit thứ 3 là bit số 2 của R và bit cuối cùng là bit số 1 của R
VIẾT CHƯƠNG TRÌNH MÃ HOÁ VÀ GIẢI MÃ DES BẰNG
Các dữ liệu chung
Dưới đây là tất cả các bảng dữ liệu tĩnh và hằng số được sử dụng trong thuật toán DES Kèm theo đó là các hàm này được sử dụng để truy xuất các bảng này theo định dạng bắt buộc để sử dụng trong các quá trình mã hóa và giải mã
Mảng 2D này biểu diễn bảng hoán vị ban đầu được sử dụng trong thuật toán DES Bảng này được sử dụng để hoán vị các bit của khối văn bản gốc trước khi bắt đầu các vòng lặp của thuật toán
Mảng 2D này biểu diễn bảng hoán vị cuối cùng được sử dụng trong thuật toán DES Bảng này được sử dụng để hoán vị các bit của khối văn bản sau khi hoàn thành tất cả các vòng lặp của thuật toán
Mảng 2D này biểu diễn bảng loại bỏ bit chẵn được sử dụng trong quá trình tạo khóa Bảng này được sử dụng để giảm kích thước khóa từ 64 bit xuống 56 bit
Mảng này biểu diễn số lượng dịch trái cần thực hiện trong mỗi vòng của quá trình tạo khóa
Mảng 2D này biểu diễn bảng nén khóa được sử dụng trong quá trình tạo khóa Bảng này được sử dụng để giảm kích thước khóa từ 56 bit xuống 48 bit
Mảng 2D này biểu diễn bảng mở rộng được sử dụng trong hàm DES Bảng này được sử dụng để mở rộng khối dữ liệu 32 bit thành 48 bit
Các mảng 2D này biểu diễn 8 hộp thay thế (S-boxes) được sử dụng trong hàm DES Các S-boxes này được sử dụng để thực hiện thao tác thay thế trong hàm DES, cung cấp tính phi tuyến tính cho thuật toán
Mảng 2D này biểu diễn bảng hoán vị thẳng được sử dụng trong hàm DES Bảng này được sử dụng để hoán vị đầu ra của các S-boxes
Chương trình tạo khóa vòng
Dưới đây là các biến và các hàm được sử dụng để tạo khóa vòng với mục đích phục vụ việc mã hóa và giải mã dùng cho mỗi vòng dựa trên khóa được cung cấp ban đầu
- leftKey : Một mảng chứa nửa trái của khóa 56 bit Nó được sử dụng trong quá trình tạo khóa vòng
- rightKey : Một mảng chứa nửa phải của khóa 56 bit Nó cũng được sử dụng trong quá trình tạo khóa vòng
- allRoundKey : Một mảng 2D chứa tất cả các khóa vòng được tạo ra trong quá trình tạo khóa Mỗi khóa vòng là một mảng 48 bit và được sử dụng trong một vòng cụ thể của quá trình mã hóa hoặc giải mã
Hình 2.16 Các biến chung chương trình tạo khóa vòng
Hàm tạo này nhận một chuỗi khóa làm đầu vào và khởi tạo quá trình tạo khóa
Nó chuyển đổi chuỗi khóa thành một khối nhị phân và sau đó thực hiện hoán vị cần thiết để tạo ra khóa 56 bit từ khóa ban đầu 64 bit
Hình 2.17 Hàm KeyGenerator (String keyWord)
Hàm này tạo ra khóa vòng cho một vòng cụ thể trong quá trình mã hóa Nó thực hiện các phép dịch trái cần thiết trên khóa 56 bit và sau đó thực hiện hoán vị để tạo ra khóa vòng 48 bit
Hình 2.18 Hàm getRoundKeyForEncryption (int roundNumber)
Hàm này tạo ra khóa vòng cho một vòng cụ thể trong quá trình giải mã Nó cũng thực hiện các phép dịch trái và hoán vị, nhưng theo thứ tự ngược lại so với quá trình mã hóa
Hình 2.19 Hàm getRoundKeyForDecryption (int roundNumber)
Hàm này tạo ra khóa vòng cho một vòng cụ thể Nó được sử dụng bởi cả hai hàm getRoundKeyForEncryption (int roundNumber) và getRoundKeyForDecryption (int roundNumber)
Hình 2.20 Hàm getRoundKey (int round)
Hàm này chuyển đổi chuỗi khóa thành một khối nhị phân Nó được sử dụng trong hàm tạo KeyGenerator(String keyWord) để chuyển đổi chuỗi khóa đầu vào thành dạng nhị phân
Hình 2.21 Hàm getEncryptedKeyword (String keyWord)
Hàm này chuyển đổi một ký tự thành một mảng 8 byte Nó được sử dụng bởi hàm getEncryptedKeyword (String keyWord) để chuyển đổi từng ký tự của chuỗi khóa thành dạng nhị phân
Hình 2.22 Hàm getBinaryBits (int ch)
Hàm này chia khóa 56 bit thành hai khóa trái và phải 28 bit Nó được sử dụng trong quá trình tạo khóa vòng
Hình 2.23 Hàm doKeySegmentation (int[] key56)
Hàm này thực hiện các phép dịch trái cần thiết trên các khóa Số lượng dịch trái phụ thuộc vào vòng hiện tại trong quá trình tạo khóa
Hình 2.24 Hàm doLeftShift (int round)
2.2.10 Hàm doOneLeftShift (int[] side1, int[] side2)
Hàm này thực hiện một phép dịch trái Nó được sử dụng bởi hàm doLeftShift(int round) để thực hiện các phép dịch trái
Hình 2.25 Hàm doOneLeftShift (int[] side1, int[] side2)
Hàm này kết hợp các khóa trái và phải để tạo thành một khóa 56 bit Nó được sử dụng trong quá trình tạo khóa vòng
2.2.12 Hàm getPermutedBy_PC1 (int[] key_in)
Hàm này thực hiện hoán vị cần thiết trên khóa để tạo ra khóa 56 bit từ khóa ban đầu 64 bit
Hình 2.27 Hàm getPermutedBy_PC1 (int[] key_in)
2.2.13 Hàm getPermutedBy_PC2 (int[] key_in)
Hàm này thực hiện hoán vị cần thiết trên khóa để tạo ra khóa vòng 48 bit từ khóa 56 bit
Hình 2.28 Hàm getPermutedBy_PC2 (int[] key_in)
Thuật toán DES
Dưới đây là các biến và các hàm được sử dụng để triển khai thuật toán DES cho việc mã hóa và giải mã
- left: Mảng này chứa nửa trái của khối văn bản sau khi được hoán vị ban đầu
Nó được sử dụng trong quá trình mã hóa và giải mã để lưu trữ nửa trái của khối văn bản sau mỗi vòng
- right: Mảng này chứa nửa phải của khối văn bản sau khi được hoán vị ban đầu
Nó cũng được sử dụng trong quá trình mã hóa và giải mã để lưu trữ nửa phải của khối văn bản sau mỗi vòng
- roundKey: Mảng này chứa khóa vòng được sử dụng trong mỗi vòng của quá trình mã hóa và giải mã Khóa vòng này được tạo ra bởi lớp KeyGenerator
- SBox_Out: Mảng này chứa đầu ra của các S-boxes sau khi thực hiện thao tác thay thế trong hàm DES Đầu ra này sau đó được sử dụng trong các bước tiếp theo của quá trình mã hóa và giải mã
Hình 2.29 Các biến chung thuật toán DES
Hàm tạo này nhận một chuỗi khóa làm đầu vào và khởi tạo quá trình mã hóa và giải mã Nó tạo một đối tượng KeyGenerator với chuỗi khóa này để tạo ra các khóa vòng
Hình 2.30 Hàm DESAlgorithm (String keyWord)
2.3.3 Hàm encrypt (String plain_text)
Hàm này mã hóa một chuỗi văn bản gốc Nó gọi hàm encrypt_decrypt(int mode, String text) với chế độ là 1 để thực hiện quá trình mã hóa
Hình 2.31 Hàm encrypt (String plain_text)
2.3.4 Hàm decrypt (String cipher_text)
Hàm này giải mã một chuỗi văn bản mã hóa Nó gọi hàm encrypt_decrypt (int mode, String text) với chế độ là 2 để thực hiện quá trình giải mã
Hình 2.32 Hàm decrypt (String cipher_text)
2.3.5 Hàm encrypt_decrypt (int mode, String text)
Hàm này thực hiện quá trình mã hóa hoặc giải mã dựa trên chế độ Nếu chế độ là 1, nó sẽ thực hiện mã hóa Nếu chế độ là 2, nó sẽ thực hiện giải mã Hàm này thực hiện các bước chính của thuật toán DES, bao gồm hoán vị ban đầu, 16 vòng của quá trình mã hóa hoặc giải mã, và hoán vị cuối cùng
Hình 2.33 Hàm encrypt_decrypt (int mode, String text)
2.3.6 Hàm getBinaryForTextBlock (String plain_text)
Hàm này chuyển đổi một khối văn bản thành một luồng nhị phân Nó được sử dụng trong hàm encrypt_decrypt (int mode, String text) để chuẩn bị dữ liệu cho quá trình mã hóa hoặc giải mã
Hình 2.34 Hàm getBinaryForTextBlock (String plain_text)
2.3.7 Hàm getInitialPermuted (int[] perm_in)
Hàm này thực hiện hoán vị ban đầu trên khối văn bản gốc Nó được sử dụng trong hàm encrypt_decrypt (int mode, String text) để bắt đầu quá trình mã hóa hoặc giải mã
Hình 2.35 Hàm getInitialPermuted (int[] perm_in)
2.3.8 Hàm doSegmentation (int[] perm_out)
Hàm này chia khối văn bản 64 bit thành hai khối 32 bit Nó được sử dụng trong hàm encrypt_decrypt (int mode, String text) để chuẩn bị dữ liệu cho các vòng của quá trình mã hóa hoặc giải mã
Hình 2.36 Hàm doSegmentation (int[] perm_out)
2.3.9 Hàm performOneRound (int mode, int round)
Hàm này thực hiện mỗi vòng cho quá trình mã hóa và giải mã Nó được gọi từ hàm encrypt_decrypt(int mode, String text) cho mỗi vòng của quá trình Trong mỗi vòng, nó thực hiện các thao tác như mở rộng, XOR, thay thế, và hoán vị
Hình 2.37 Hàm performOneRound (int mode, int round)
2.3.10 Hàm doExpansion (int[] right_in)
Hàm này chuyển đổi nửa phải 32 bit thành 48 bit bằng cách sử dụng bảng mở rộng Nó được sử dụng trong hàm performOneRound (int mode, int round) để chuẩn bị dữ liệu cho thao tác XOR
Hình 2.38 Hàm doExpansion (int[] right_in)
2.3.11 Hàm getXOR_48Bit (int[] side1, int[] side2)
Hàm này thực hiện một phép XOR giữa hai đầu vào 48 bit Nó được sử dụng trong hàm performOneRound (int mode, int round) để thực hiện thao tác XOR giữa khóa vòng và đầu ra của thao tác mở rộng
Hình 2.39 Hàm getXOR_48Bit (int[] side1, int[] side2)
2.3.12 Hàm doSubstitution (int[] XOR_Out)
Hàm này thực hiện thay thế, chuyển đổi một đầu vào 48 bit thành một đầu ra
32 bit Nó được sử dụng trong hàm performOneRound(int mode, int round) để thực hiện thao tác thay thế sau thao tác XOR
Hình 2.40 Hàm doSubstitution (int[] XOR_Out)
Hàm này tính toán số hàng thập phân cho mỗi S-box Nó được sử dụng trong hàm doSubstitution(int[] XOR_Out) để xác định hàng cho mỗi S-box
Hình 2.41 Hàm getSBoxRow (int[] num)
Hàm này tính toán số cột thập phân cho mỗi S-box Nó cũng được sử dụng trong hàm doSubstitution(int[] XOR_Out) để xác định cột cho mỗi S-box
Hình 2.42 Hàm getSBoxColumn (int[] num)
2.3.15 Hàm getOutputFromSBox (int choice, int row, int col)
Hàm này trả về đầu ra thập phân từ mỗi S-box Nó được sử dụng trong hàm doSubstitution(int[] XOR_Out) để lấy đầu ra từ mỗi S-box
Hình 2.43 Hàm getOutputFromSBox (int choice, int row, int col)
2.3.16 Hàm make32bit(int index, int num)
Hàm này kết hợp tất cả các đầu ra S-box để tạo thành một đầu ra 32 bit Nó được sử dụng trong hàm doSubstitution (int[] XOR_Out) để tạo ra đầu ra 32 bit sau thao tác thay thế
Hình 2.44 Hàm make32bit (int index, int num)
Hàm này đảo ngược chuỗi bit Nó được sử dụng trong hàm doSubstitution (int[] XOR_Out) để đảo ngược đầu ra của thao tác thay thế trước khi thực hiện thao tác XOR tiếp theo
Hình 2.45 Hàm Reverse (int[] num)
2.3.18 Hàm getXOR_32Bit (int side1[], int[] side2)
Hàm này thực hiện một phép XOR giữa hai đầu vào 32 bit Nó được sử dụng trong hàm performOneRound (int mode, int round) để thực hiện thao tác XOR giữa nửa trái và đầu ra của thao tác thay thế
Hình 2.46 Hàm getXOR_32Bit (int side1[], int[] side2)
Hàm này hoán đổi nửa trái và nửa phải cho mỗi vòng Feistel Nó được sử dụng trong hàm encrypt_decrypt(int mode, String text) sau mỗi vòng để chuẩn bị cho vòng tiếp theo
Hình 2.47 Hàm getXOR_32Bit (int side1[], int[] side2)
Hàm này nối nửa trái và nửa phải lại với nhau Nó được sử dụng trong hàm encrypt_decrypt(int mode, String text) sau tất cả các vòng để tạo ra khối văn bản sau cùng trước khi thực hiện hoán vị cuối cùng
2.3.21 Hàm getFinalPermuted (int[] perm_in)
Triển khai quá trình mã hóa
2.4.1 Hàm doPadding (String input_text)
Hàm này thêm padding vào văn bản đầu vào để đảm bảo độ dài của nó là bội số của 8 Điều này cần thiết cho thuật toán DES, vì nó hoạt động trên các khối 8 byte Nếu văn bản đầu vào không phải là bội số của 8, việc mã hóa sẽ không thể diễn ra đúng cách
Hình 2.50 Hàm doPadding (String input_text) quá trình mã hóa
2.4.2 Hàm doECB (String plain_text)
Hàm này chia văn bản gốc thành các khối 8 byte cho thuật toán DES Thuật toán DES hoạt động trên các khối dữ liệu cố định 8 byte, do đó chúng ta cần phải chia văn bản gốc thành các khối 8 byte trước khi thực hiện mã hóa
Hình 2.51 Hàm doECB (String plain_text) quá trình mã hóa
2.4.3 Hàm des_encrypt (String plain_text, String key)
Hàm này mã hóa văn bản gốc sử dụng thuật toán DES và khóa được cung cấp Việc mã hóa này bảo vệ thông tin từ sự truy cập trái phép
Hình 2.52 Hàm des_encrypt (String plain_text, String key)
2.4.4 Hàm writeDataInAFile (String text, String fileName)
Hàm này ghi văn bản đã mã hóa vào một tệp Sau khi mã hóa, chúng ta cần lưu trữ văn bản đã mã hóa để sử dụng sau này hoặc truyền đi
Hình 2.53 Hàm writeDataInAFile (String text, String fileName)
Hàm này đọc dữ liệu từ một tệp Nó được sử dụng để đọc văn bản gốc trước khi mã hóa
Hình 2.54 Hàm readDataFromAFile (String fileName)
Triển khai quá trình giải mã
2.5.1 Hàm doPadding (String input_text)
Hàm này thêm padding vào văn bản đầu vào để đảm bảo độ dài của nó là bội số của 8 Điều này cần thiết cho thuật toán DES, vì nó hoạt động trên các khối 8 byte
Nếu văn bản đầu vào không phải là bội số của 8, việc mã hóa sẽ không thể diễn ra đúng cách
Hình 2.55 Hàm doPadding (String input_text) quá trình giải mã
2.5.2 Hàm doECB (String plain_text)
Hàm này chia văn bản gốc thành các khối 8 byte cho thuật toán DES Thuật toán DES hoạt động trên các khối dữ liệu cố định 8 byte, do đó chúng ta cần phải chia văn bản gốc thành các khối 8 byte trước khi thực hiện mã hóa
Hình 2.56 Hàm doECB (String plain_text) giá trình giải mã
2.5.3 Hàm des_decrypt (String cipher_text, String key, String filePath)
Hàm này giải mã văn bản mã hóa sử dụng thuật toán DES và khóa được cung cấp Đây là bước thực sự thực hiện giải mã dữ liệu
Hình 2.57 Hàm des_decrypt (String cipher_text, String key, String filePath)
2.5.4 Hàm writeDataInAFile (String text, String fileName)
Hàm này ghi văn bản đã giải mã vào một tệp Sau khi giải mã, chúng ta cần lưu trữ văn bản đã giải mã để sử dụng sau này
Hình 2.58 Hàm writeDataInAFile (String text, String fileName)