Thiết kế và cài đặt chương trình

Một phần của tài liệu GIẤU TIN TRONG ẢNH DỰA TRÊN MA TRẬN TẦN SỐ (Trang 73 - 79)

Tạo ngẫu nhiên cặp khóa công khai/bí mật

- Độ dài khóa đƣợc tạo ra có thể là 1024 bit hoặc 2048 bit.

- Sử dụng lớp RSACryptoServiceProvider. Lớp này có một số đặc điểm sau: + Thi hành mã hoá và giải mã bất đối xứng bằng cách sử dụng việc thi hành giải thuật RSA đƣợc cung cấp bởi Cryptographic service provider (CSP)

+ Gọi hàm RSACryptoServiceProvider(keysize) để khởi tạo một thể hiện của lớp RSACryptoServiceProvidervới kích thƣớc khoá keysize

+ Gọi hàm RSACryptoServiceProvider.ToXmlString(value). Hàm này nhận kết quả là cặp khoá công khai và khoá riêng của RSA nếu value có giá trị là true; nhận kết quả là chỉ khoá riêng nếu giá trị của value là false

- Kết quả thu đƣợc là một cặp khóa công khai/bí mật đƣợc sinh ra một cách ngẫu nhiên, đủ mạnh

Nén thông điệp mật

- Đầu vào là thông điệp mật cần giấu

- Sử dụng thƣ viện ZetaCompressionLibrary.dll

- Gọi lớp CompressionHelper, có đặc điểm sau:

+ Sử dụng giải thuật nén không mất mát thông tin, đạt các chuẩn ZIP, GZIP để nén và giải nén dữ liệu

+ Có thể nén các loại dữ liệu sau: thƣ mục; nhiều file cùng một lúc; các file XML trong bộ nhớ; một đoạn văn bản; một Dataset trong bộ nhớ; một dãy byte trong bộ nhớ

+ Kết quả trả ra là một dãy byte

Mã hóa thông điệp mật

- Thực hiện nhận khoá keyvà vectơ ban đầu ivmột cách ngẫu nhiên, có độ dài 16 byte

+ Các giá trị nhận đƣợc bằng cách lấp đầy 16 byte với một dãy mật mã các giá trị ngẫu nhiên đủ mạnh

+ Gọi RNGCryptoServiceProvider để tạo ra một bộ sinh số ngẫu nhiên, lấp đầy cho khóa key và vecto iv

- Mã hóa thông điệp mật cần giấu bằng giải thuật AES với khóa key và iv vừa nhận đƣợc, sử dụng lớp RijndaelManaged

+ Dựa vào giải thuật Rijindael

+ Gọi phƣơng thức CreateEncryptor (key, iv) để tạo ra bộ mã hoá Rijindael với khoá key và vecto khởi tạo iv

- Quá trình thực hiện nhƣ sau: + Tạo ra một bộ mã hoá

+ Mã hoá dữ liệu

+ Ghi dữ liệu đã mã hoá vào một stream + Kết quả nhận đƣợc một dãy các byte

- Mã hoá keyivbằng giải thuật RSA, sử dụng lớp RSACryptoServiceProvider

- Thêm key ivđã mã hóa vào đầu thông điệp

- Kết quả nhận đƣợc bao gồm: 2 byte độ dài khóa, key, ivvà thông điệp mật đã mã hóa

Giấu tin mật

Sử dụng giải thuật F5 đã trình bày ở chƣơng 2

Tách tin mật

- Tách thông điệp mật đã giấu - Giải mã thông điệp

+ Sử dụng khoá riêng đã trao đổi trƣớc để giải nén + Khởi tạo một thể hiện của RSACryptoServiceProvider (adsbygoogle = window.adsbygoogle || []).push({});

+ Sử dụng đối tƣợng RSAParameters: biểu diễn các tham số của giải thuật RSA. Với đối tƣợng này, tính toán tất cả các tham số cần thiết của RSA: D, P, DP, DQ, Exponent, InverseQ, Modulus, P, Q

+ Tách giá trị keyiv

Ảnh gốc Biến đổi ảnh gốc sang miền tần số

Biến đổi Cô sin rời rạc Lƣợng tử hóa/ giải lƣợng tử Sắp xếp Zig-Zag Mã hóa/ Giải mã Huffman Ghi file Nhúng thông tin

+ Giải mã thông điệp

- Sử dụng lớp RijndaelManaged

- Gọi phƣơng thức CreateDecryptor để tạo bộ giải mã + Các bƣớc thực hiện

- Tạo ra bộ giải mã - Giải mã thông điệp + Đọc dữ liệu đầu ra vào một dãy

- Thực hiện giải nén bằng cách sử dụng thƣ viện ZetaCompressionLibrary.dll

và lớp CompressionHelper.

Thực hiện chương trình

Giao diện của chƣơng trình nhƣ sau:

Hình 3.2 Giao diện chính của chương trình

- Thực hiện giấu tin mật: + Chọn tin mật

+ Chọn khóa mã công khai của ngƣời nhận + Nhập mật khẩu (không đƣợc chứa dấu cách)

+ Kích chọn ảnh mang cần giấu tin + Kích chọn nút Giấu tin mật

Hình 3.3 Giao diện giấu tin mật

- Thực hiện tách tin mật

+ Chọn ảnh nguồn đã chứa tin mật

+ Chọn File sẽ lƣu trữ tin mật tách ra đƣợc từ ảnh nguồn + Nhập mật khẩu

+ Kích chọn nút Tách tin

Hình 3.4 Giao diện tách tin mật

- Trợ giúp chương trình:

Một phần của tài liệu GIẤU TIN TRONG ẢNH DỰA TRÊN MA TRẬN TẦN SỐ (Trang 73 - 79)