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á key và ivbằng giải thuật RSA, sử dụng lớp RSACryptoServiceProvider
- Thêm key và 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
+ 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ị key và iv
Ả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: