1. Trang chủ
  2. » Công Nghệ Thông Tin

Tiểu luận Giấu thông tin trong ảnh sử dụng phương pháp Steganography (dấu tin, viết phủ) (Có Source Code)

4 437 4

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 4
Dung lượng 82,5 KB

Nội dung

Steganography (dấu tin, viết phủ) là lĩnh vực nghiên cứu việc nhúng các mẩu tin mật vào một môi trường phủ. Trong quá trình dấu tin để tăng bảo mật có thể người ta dùng một khoá viết mật khi đó người ta nói về Intrinsic Steganography (dấu tin có xử lý). Khi đó để giải mã người dùng cũng phải có khoá viết mật đó. Chú ý rằng khoá này không phải là khoá dùng để lập mật mã mẩu tin, ví dụ nó có thể là khoá để sinh ra hàm băm phục vụ rải tin vào môi trường phủ. Ngược lại nếu không dùng khoá viết mật thì người ta chỉ dấu tin đơn thuần vào môi trường phủ thì khi đó người ta nói về Pure Steganography (dấu tin đơn thuần).

Trang 1

Giấu thông tin trong ảnh sử dụng phương pháp Steganography (dấu tin, viết phủ)

I Giới thiệu chung

Steganography (dấu tin, viết phủ) là lĩnh vực nghiên cứu việc nhúng các

mẩu tin mật vào một môi trường phủ Trong quá trình dấu tin để tăng bảo mật có thể người ta dùng một khoá viết mật khi đó người ta nói về Intrinsic Steganography (dấu tin có xử lý) Khi đó để giải mã người dùng cũng phải có khoá viết mật đó Chú ý rằng khoá này không phải là khoá dùng để lập mật mã mẩu tin,

ví dụ nó có thể là khoá để sinh ra hàm băm phục vụ rải tin vào môi trường phủ Ngược lại nếu không dùng khoá viết mật thì người ta chỉ dấu tin đơn thuần vào môi trường phủ thì khi đó người ta nói về Pure Steganography (dấu tin đơn thuần).

Ý tưởng xây dựng thuật toán:

+ Giấu tin: đọc 1 byte từ khối key, lưu chúng vào currentKey; đọc 1 byte từ khối tin cần giấu và sử dụng phép XOR đối với chúng, lưu lại trong currentByte; di chuyển key pixels sang phải, hoặc xuống dưới nếu cần thiết; tô màu cho pixels; set giá trị R,G, hay B cho currentByte

+Đọc tin: đọc 1 byte từ phân lớp key; tính toán vị trí của pixel kế tiếp; nhận màu từ pixel, viết giá trị R,G,B vào lớp ảnh

messageLength = (Int32)messageStream.Length;

//

String colorValue = messageLength.ToString("x");

colorValue = UnTrimColorString(colorValue, 6);

int red = Int16.Parse(colorValue.Substring(0 2), NumberStyles.HexNumber);

int green = Int16.Parse(colorValue.Substring(2 2), NumberStyles.HexNumber);

int blue = Int16.Parse(colorValue.Substring(4 2), NumberStyles.HexNumber);

pixelColor = Color.FromArgb(red, green, blue);

bitmap.SetPixel(0 0, pixelColor);

Read byte from the key:

//Bắt đầu với pixel thứ 2

Point pixelPosition = new Point(1 0);

//Loop

for(int messageIndex=0; messageIndex<messageLength; messageIndex++){

//repeat the key, if it is shorter than the message

Trang 2

if(keyStream.Position == keyStream.Length){

keyStream.Seek(0, SeekOrigin.Begin);

}

//Get the next pixel-count from the key, use "1" if it's 0

currentKeyByte = (byte)keyStream.ReadByte();

currentStepWidth = (currentKeyByte==0) ? (byte) : currentKeyByte;

//jump to reverse-read position and read from the end of the stream

keyPosition = keyStream.Position;

keyStream.Seek(keyPosition, SeekOrigin.End);

currentReverseKeyByte = (byte)keyStream.ReadByte();

//jump back to normal read position

keyStream.Seek(keyPosition, SeekOrigin.Begin);

//Perform line breaks, if current step is wider than the image

while(currentStepWidth > bitmapWidth){

currentStepWidth -= bitmapWidth;

pixelPosition.Y++;

}

//Di chuyển vị trí

if((bitmapWidth - pixelPosition.X) < currentStepWidth){

pixelPosition.X = currentStepWidth - (bitmapWidth - pixelPosition.X);

pixelPosition.Y++;

}else{

pixelPosition.X += currentStepWidth;

}

get the pixel and put the message-byte into one color component:

//Get color of the "clean" pixel

pixelColor = bitmap.GetPixel(pixelPosition.X, pixelPosition.Y);

//To add a bit of confusion, xor the byte with

//a byte read from the keyStream

int currentByte = messageStream.ReadByte() ^ currentReverseKeyByte;

if(useGrayscale){

pixelColor = Color.FromArgb(currentByte, currentByte, currentByte);

}else{

//Change one component of the color to the message-byte

SetColorComponent(ref pixelColor, currentColorComponent, currentByte);

//Rotate color components

currentColorComponent =

(currentColorComponent==2) ? 0 : (currentColorComponent+1);

}

} //kết thúc vòng for, chuyển sang byte kế tiếp

II Mô tả chương trình

Trang 3

III Ưu nhược điểm của chương trình

Ưu điểm : khả năng bảo mật tương đối cao, người ngoài khi biết được file ảnh giấu tin cũng khó mà có thể đọc tin được vì không rõ key sử dụng là text hay file, khi key là file thì không rõ file giữ key là file nào

Trang 4

Nhược điểm : chất lượng ảnh còn kém, dễ phát hiện được bằng mắt thường, dung lượng giấu tin nhỏ

IV Tài liệu tham khảo

Tham khảo một số code của trang web http://www.codeproject.com

Ngày đăng: 17/10/2014, 15:29

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w