Đọc header của ảnh (phần chứa thông tin ảnh) để lấy thông tin ảnh. Sau đó đọc toàn bộ dữ liệu ảnh vào một mảng hai chiều A để sử dụng cho việc giấu tin.
b. Quá trình thực hiện giấu tin
Chia A thành các khối kích thước mxn.
Với mỗi khối B trong A ta xét khả năng giấu một bít dữ liệu di của d theo Quy tắc cân bằng tính chẵn lẽ như sau:
- Gọi t là tổng số điểm trắng (bít mang giá trị 1) trong B. Nếu t và di cùng tính chẵn lẽ thì không sửa khối B và coi như khối này đã được giấu bít dữ liệu di. Trong trường hợp ngược lại, nếu t và di khác tính chẵn lẽ thì đảo ngẫu nhiên một bít trong B để t và di trở thành cùng tính chẵn lẻ. .
Giả sử cần giấu 1 bít dữ liệu b vào khối B. Ký hiệu SUM(B) là tổng số điểm trắng trong khối B, kí hiệu x=y(mod z) cho biết hai số nguyên x và y có cùng số dư khi chia cho z (x và y đồng dư theo modulo z). Như vậy biểu thức x = y(mod 2) cho biết x và y có cùng tính chẵn lẽ. Nói riêng, khi y là một bit thông tin , biểu thức trên tương đương với x mod 2 =y. Ta xét hai trường hợp sau đây:
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
Trường hợp thứ nhất: SUM(B) = b(mod 2), Khối B thoả mãn tính chất để
giấu bít dữ liệu b, ta không cần sửa khối B và xem như bít b đã được giấu vào khối B.
Trường hợp thứ hai: SUM(B) ≠ b (mod 2). trường hợp này phải sửa B để thay đổi tính chẵn lẻ của SUM(B) sẽ tăng hoặc giảm 1 đơn vị. Gọi B‟ là khối kết quả thu được từ khối B sau khi đảo một bít trong B. Ta có SUM(B‟) = b (mod 2).
Thí dụ dưới đây minh họa cho hai trường hợp trên. *) Giả sử ta phải giấu bít dữ liệu b=1 vào khối B như sau:
Khối B kích thước 4x4, SUM(B)= 8
Ta đếm số bít 1 trong khối: Trong trường hợp ở trên khối B có 8 bít 1, SUM(B)=8. Do đó, SUM(B) ≠ 1(mod 2). Như vậy khối B không thỏa mãn yêu cầu để giấu bít 1. Muốn giấu bít 1 vào khối này ta cần phải thay đổi khối bằng cách
chọn một bít bất kì và đổi từ 0 sang 1 hoặc từ 1 sang 0. Giả sử ta sửa lại phần tử B[2,2] như sau:
Khi đó ta có SUM(B‟) = 7, và do đó SUM(B‟) = 1 (mod 2).
1 0 1 1 0 1 0 0 0 0 1 0 1 1 1 0 1 0 1 1 0 0 0 0 0 0 1 0 1 1 1 0 bít bị thay đổi từ 1 thành 0
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
*) Giả sử vẫn là khối B đã cho ở trên nhưng ta phải giấu bít dữ liệu b=0 vào khối đó. Ta có, do SUM(B) = 8, nên SUM(B) = 0(mod 2). Khối B thoả mãn yêu cầu giấu bít 0. Và xem như bít dữ liệu b=0 đã được giấu.
Với mỗi bít dữ liệu ta lấy một khối để giấu theo quy tắc trên cho đến hết lượng thông tin cần giấu. Sau khi giấu xong ta được một ma trận hai chiều chứa dữ liệu ảnh mới A‟. Bước tiếp theo, ta xây dựng ảnh mới bằng cách gắn header ảnh gốc đã đọc ra lúc đầu vào A‟ để thu được file ảnh mới G.
3.1.2. Thuật toán trích tin
Trong thuật toán giấu tin này, khoá đơn giản chỉ là kích thước của khối, tức là bộ số (m, n). Nếu biết kích thước khối thì dễ dàng trích lại dữ liệu d theo thuật toán SIDH như sau:
*) Thuật toán
Input: File ảnh Bitmap đen trắng có chứa tin G
Output: Dữ liệu d (dãy bít 0/1) trích từ ảnh G, d = SIDH(G)
a. Tiền xử lí:
Đọc header của ảnh G (phần chứa thông tin) để lấy thông tin ảnh. Sau đó đọc toànbộ dữ liệu ảnh vào một mảng hai chiều A để sử dụng cho việc trích tin.