Giới thiệu về ngụn ngữ lập trỡnh VB.Net

Một phần của tài liệu Một số phương pháp giấu tin trong tài liệu số hóa (Trang 59)

3.1.1 Lịch sử về ngụn ngữ Visual Basic.Net

Năm 2002, tuy hơi chậm khi người khổng lồ Microsoft nhận thấy trước tầm ảnh hưởng của Internet, cỏch mà Internet đó đang và sẽ thay đổi cả thế giới. Microsoft đó quyết định rằng Internet là phần cốt lừi của Visual Basic trong tương lai. Microsoft định hỡnh một hướng đi mới – xõy dựng lại toàn bộ kiến trỳc cho Visual Basic. Bắt đầu một bước ngoặt mới khi Microsoft quyết định làm lại từ đầu, tạo ra một mụi trường phỏt triển ứng dụng hỗ trợ đa ngụn ngữ lập trỡnh mới trờn khuụn nền .Net Framework. Visual Basic.Net 2002 ra đời, việc phỏt triển ứng dụng Web bõy giờ đó là một phần tớch hợp của Visual Basic như phỏt triển ứng dụng Windows.

Năm 2003, Microsoft tiếp tục nõng cấp Visual Basic.Net 2002 để cho ra đời Visual Basic.Net 2003. Phiờn bản này hỗ trợ thờm cho phỏt triển ứng dụng Web trờn Mobie như PDA hay cỏc thiết bị thụng minh như PC Pocket. Việc cải tiến cũng được thực hiện cho cỏc dịch vụ Web và cụng cụ chuyển mó (Visual Basic 6.0-VB6 sang Visual Basic.Net).Năm 2005, Microsoft tiếp tục phỏt triểnphiờn bản mới Visual Basic.Net 2005. Phiờn bản này chứa rất nhiều Wizard sinh mó tự động, thờm nhiều từ khúa làm tăng tốc độ viết mó và hiệu suất thực thi của ứng dụng. Cải tiến toàn bộ thư viện xử lý dữ liệu ADO.Net, đưa ra rất nhiều thành phần giao diện trực quan hiệu quả cho ứng dụng Windows lẫn Web. Hỗ trợ lập trỡnh Web và Internet tối đa với khả năng thiết kế cỏc ứng dụng ASP.Net trực quan. Visual Basic.Net 2005 đó đưa Microsoft lờn một tầm cao mới. Nú đỏp ứng hầu như mong mỏi của hàng triệu lập trỡnh viờn trờn thế giới. Hiện nay đó cú phiờn bản Visual Basic.Net 2012.

3.1.2 Những đặc điểm nổi bật của ngụn ngữ Visual Basic.Net

Visual Basic.Net là ngụn ngữ lập trỡnh khuynh hướng đối tượng (Object Oriented

Programming Language - OOP), một trong những ngụn ngữ được tạo ra để hướng đến

mục tiờu tạo ra ứng dụng phõn tỏn trờn mụi trường .Net dựa trờn nền Microsoft 's .Net Framework. Giờ đõy, Visual Basic.Net chuyển sang hướng đi hoàn toàn mới đú là tập trung vào phỏt triển cỏc ứng dụng cho mụi trường đa tầng, cỏc ứng dụng phõn tỏn,…Đặc biệt là trong lĩnh vực cụng nghệ Internet, lập trỡnh ứng dụng mạng, xõy dựng ứng dụng Web,...với cụng cụ tạo cỏc ứng dụng Web mới là Visual Web Developer được viết ASP.Net mạnh mẽ, chỉnh chu hơn và đơn giản hơn .

Visual Basic.Net hỗ trợ đầy đủ bốn tớnh chất của ngụn ngữ lập trỡnh hướng đối tượng: Tớnh thừa kế (Inheritance), Trừu tượng húa dữ liệu (Abstraction) , Tớnh đa hỡnh (Polymorphism), Tớnh đúng gúi (Encapsulation). Visual Basic.Net bổ sung thờm cỏc tớnh năng khuynh hướng đối tượng như: Giao tiếp (Interface) , Nạp chồng (Overloading) , Hàm tạo và hàm hủy, Xử lý ngoại lệ cú cấu trỳc, Xử lý đa luồng .

3.1.3 Những ứng dụng ngụn ngữ Visual Basic.Net

Visual Basic.Net cú thể viết hầu hết cỏc loại ứng dụng như: Tạo ứng dụng trũ chơi trờn Windows; Tạo cỏc ứng dụng quản lý cho doanh nghiệp; Tạo bỏo cỏo, tập tin văn bản; Xử lý đồ họa; Tương tỏc với hệ thống tập tin của Window; Truy xuất cơ sở dữ liệu; Tạo cỏc dịch vụ Windows; Tạo cỏc thư viện liờn kết động (DLL); Tạo cỏc ứng dụng cho PDA, Mobie (Pocket PC),…Điểm nổi bật khi bạn để ý thấy chữ “.Net” trong Visual Basic.Net, bạn sẽ thấy ngay ngụn ngữ lập trỡnh này chuyờn trị tạo ứng dụng của mụi trường .Net như: Lập trỡnh ứng dụng mạng (Network Application Programming), tạo ứng dụng Web / Internet (ASP.Net), tạo cỏc dịch vụ Web (Web Services),…

3.2 Bài toỏn giấu tin trong ảnh màu

Bài toỏn giấu tin trong ảnh màu được thiết kế và cài đặt với mục đớch thể hiện thuật toỏn giấu tin trong ảnh màu. Trong bài này chỳng ta sẽ nghiờn cứu bài toỏn giấu tin trong ảnh bitmap 24bit

Input:

- Ảnh gốc: Là ảnh dựng để chứa nội dung thụng điệp muốn giấu - Thụng điệp: Là đoạn văn bản muốn truyền tải

- Mật khẩu: Được xem như là khúa bớ mật giữa người gửi và người nhận, được dựng để trỏnh sự tấn cụng của kẻ địch

Output:

- Ảnh mang: Là ảnh cú chứa nội dung thụng điệp

Sơ lược về ảnh bitmap: Ảnh bitmap được lưu trữ dưới dạng ảnh nhị phõn. Một tệp dạng bitmap được chia thành cỏc thành phần cơ bản sau:

- Phần tiờu đề tệp (Bitmap header):Mụ tả thụng tin chung về tệp định dạng

bitmap, độ lớn của phần này cố định với mọi tệp bitmap

- Thụng tin về ảnh (Bitmap Infor):Mụ tả thụng tin về ảnh được lưu trữ, độ lớn

của phần này cố định

- Bảng màu (Palette table):Bảng màu của ảnh bitmap, độ lớn của phần này cú

thể bằng khụng ( khụng cú bảng màu) đối với ảnh đen trắng và ảnh màu cú số lượng màu lớn hơn 256 màu

- Vựng dữ liệu (Data):Thụng tin về từng điểm ảnh , độ lớn của phần này phụ

thuộc vào kich thước ảnh. Phần Data lưu trữ ảnh theo hướng từ dưới lờn trờn và từ trỏi qua phải

Thứ tự được lưu trữ trong bộ nhớ như sau: Bitmap header  Bitmap Infor Palette table Data.

Cấu trỳc của file ảnh BMP:File này là file nhị phõn, được phõn chia thành 4 phần. Bao gồm File Header, Image Header, Color Table, và cuối cựng là Pixel Data.

* FileHeader: (14 BYTE) cú chức năng chớnh:

- Xỏc định đõy cú phải là file BMP hay khụng (2 byte đầu tiờn) - Độ lớn của file ảnh (4 byte tiếp theo)

- Xỏc đinh vị trớ của dữ liệu ảnh (adsbygoogle = window.adsbygoogle || []).push({});

Tờn trƣờng Kớch thƣớc (byte) Miờu tả

Type 2 Là 2 kớ tự „B‟ và „M‟

Size 4 Kớch thước của file

Reserved 1 2

Khụng được sử dụng, phải cú giỏ trị là 0.

Reserved 2 2

OffBits 4 Vị trớ bắt đầu phần The Pixel Data

Bảng 3.1. Cấu trỳc FileHeader của ảnh Bipmap

* ImageHeader (40 BYTE): Chức năng chớnh là đưa ra thụng tin chi tiết về ảnh và định dạng dữ liệu như:

- Chiều rộng và chiều cao của ảnh

- Bao nhiờu bit được sử dụng cho 1 pixel - Dữ liệu ảnh cú được nộn hay khụng.

Tờn trƣờng Kớch thƣớc (byte) Miờu tả

Size 4 Kớch thước phần Header, phải nhỏ hơn 40.

Width 4 Chiều rộng file theo Pixel

Height 4 Chiều cao file theo Pixel

Planes 2 Phải là 1

BitCount 2 Số bit trờn 1 Pixel : 1, 2, 4, 8, 16, 24, hoặc 32. Compression 4 Kiểu nộn (0 = Khụng được nộn)

SizeImage 4 Kớch thước ảnh, phải là 0 đối với ảnh khụng được nộn

XPelsPerMeter 4 Uu tiờn độ phõn giải pixels/ meter YPelsPerMeter 4 Uu tiờn độ phõn giải pixels/ meter

ClrUsed 4 Số màu Map được sử dụng thực sự

ClrImportant 4 Số mày cú ý nghĩa

ColorTables: Tiếp theo là Palette màu của BMP, gồm nhiều bộ cú kớch thước 4 byte xếp liền nhau theo cấu trỳc Blue-Green-Red và một Byte dành riờng cho Itensity. Kớch thước của vựng Palette màu bằng 4 x số màu của ảnh. Nếu số bits màu của ảnh (byte 15- 16 của Info là 24 hoặc 32 thỡ khụng cú vựng Palette). Vỡ Palette màu của màn hỡnh cú cấu tạo theo thứ tự Red-Green-Blue nờn khi đọc Palette màu của ảnh BMP vào ta phải chuyển đổi lại cho phự hợp. Số màu của ảnh được biết dự trờn số Bits cho 1 pixel cụ thể là:

- Nếu là ảnh 24 bit, thỡ ColorTable khụng được biểu diễn.

- Nếu là ảnh 8 bit thỡ ColorTable chứa 256 “entries” với mỗi “entry” chứa 4 byte của dữ liệu. 3 byte đầu tiờn là giỏ trị cường độ màu Blue, Green, Red. Byte cuối cựng khụng được sử dụng và phải bằng zero.

The Pixel Data: Với ảnh 8 bit, mỗi pixel được biểu diễn bởi 1 byte đơn của dữ liệu.Với ảnh 24 bit, mỗi pixel được biểu diễn bởi 3 byte tuần tự của dữ liệu.

3.3 Thiết kế và cài đặt chương trỡnh giấu tin trong ảnh màu trờn Visual Basic.NET 3.3.1 Thiết kế cỏc chức năng của chƣơng trỡnh

Hỡnh 3.1. Cỏc chức năng chớnh của chương trỡnh

3.3.2 Cài đặt chức năng giấu thụng tin trong ảnh

Xõy dựng Module ModGlobal: bao gồm hàm kiểm tra đõy cú phải ảnh BMP hay khụng và thủ tục zoomOut để phúng to ảnh,1 hàm kiểm tra độ sõu màu (hay núi cỏch khỏc là kiểm tra ảnh 1, 2,4,8 bit).

PublicFunction CheckBMP(ByVal inStream As FileStream) AsBoolean (adsbygoogle = window.adsbygoogle || []).push({});

Dim char1 AsChar

Giấu thụng điệp Chương trỡnh giấu thụng tin trong ảnh Giấu thụng tin Lấy thụng tin

Giấu File văn bản Giấu File ảnh

Lấythụng điệp Lấy File văn bản Lấy File ảnh

Dim char2 AsChar

char1 = Chr(inStream.ReadByte()) char2 = Chr(inStream.ReadByte)

If char1 = "B"And char2 = "M"Then ReturnTrue

Else ReturnFalse EndIf EndFunction

PublicSub zoomOut(ByVal objPic As PictureBox)

Dim obj As Form = New Form() obj.Height = 600

obj.Width = 600 obj.Text = "Zoom out"

obj.StartPosition = FormStartPosition.WindowsDefaultBounds

Dim objPicBox AsNew PictureBox obj.Controls.Add(objPicBox) objPicBox.SizeMode = PictureBoxSizeMode.StretchImage objPicBox.Dock = DockStyle.Fill objPicBox.Image = objPic.Image obj.Show() EndSub

PublicFunction ktDoSauMau(ByVal fileName AsString) AsBoolean

Dim inStream As FileStream = New FileStream(fileName, FileMode.Open, FileAccess.Read)

Dim b AsByte

inStream.Seek(28, SeekOrigin.Begin) b = inStream.ReadByte()

'MsgBox(b)

If (b = 1) Or (b = 2) Or (b = 4) Or (b = 8) Then

If (MessageBox.Show("Ảnh cú độ sõu màu quỏ nhỏ, chất lượng ảnh sau khi giấu kộm."& vbCrLf &"Bạn nờn chọn ảnh khỏc !", "Thụng bỏo", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning)) = DialogResult.OK Then ReturnFalse Else ReturnTrue EndIf Else ReturnTrue EndIf EndFunction

Xõy dựng một số lớp giải quyết vấn đề:

- Lớp clsBIT:Bao gồm hàm lấy ra 1 bit trong byteRead tại vị trớ xỏc định.Và thủ tục thay thế giỏ trị của bit LSB trong 1 byte ảnh.

'Bao gồm 2 phương thức tĩnh Extract và Replace 'Hàm lấy ra 1 bit trong byteRead tại vị trớ xỏc định.

'Toỏn tử << là phộp dịch bit sang trỏi, (x << y): gt trả ra x*2^y 'Toỏn tử >> là phộp dịch bit sang phải,(x >> y): gt trả ra x div 2^y

Public Shared Function Extract(ByVal b As Byte, ByVal pos As Integer) As Byte Return CByte(b And (1 << pos)) >> pos

End Function

'Thủ tục thay thế giỏ trị của bit LSB trong 1 byte ảnh.

Public Shared Sub Replace(ByRef b As Byte, ByVal pos As Integer, ByVal value As Byte) If value = 1 Then

b = CByte(b Or (1 << pos)) Else

b = CByte(b And (Not (1 << pos))) End If (adsbygoogle = window.adsbygoogle || []).push({});

End Sub

Lớp clsLSB: Cú một thủ tục “hideMess” thay thế bit ớt quan trọng trong từng byte của file ảnh bằng từng bit của message cần giấu

Begin

- Input: InputStream, mess, i=0, j=0 - i là chỉ số của mảng byte hiddenMessage - j là chỉ số của từng bit trong hiddenMessage(i) - While chưa đọc hết file ảnh

. ByteĐọc=InStream.ReadByte

. If chưa đọc hết kớ tự trong hidemess then

*Lấy ra bit ở vị trớ thứ j của Hidemess(i). Bit=Extract(Hidemess(i),j)

*Tăng j lờn 1: j=j+1

*Thay thế Bit vừa lấy ra ở trờn với bit tại vị trớ 0 của ByteĐọc Replace(ByteĐọc,0,Bit)

*Nếu ẩn hết cỏc bit của 1 kớ tự trong mess tức là j=7 thỡ khởi tạo lại j=0 và i=i+1 tức là ẩn kớ tự tiếp theo End if

. Ghi ByteĐọc vừa được thay thế vào 1 luồng mới outputStrea Loop

output: outputStream End

Hỡnh 3.2: Lưu đồ thuật toỏn giấu tin

Một thủ tục ẩn thụng tin vào file ảnh: thay thế LSB với đầu vào là 1 luồng để dọc cỏc byte ảnh và mảng byte của HiddenMessage. Đầu ra sẽ là luồng output mới chứa HiddenMessage trong file ảnh.Trong thủ tục này ta chỉ thao tỏc với cỏc bit dữ liệu của thụng điệp với cỏc bit của phần Data Pixel trong file ảnh:

'Thủ tục thay thế bit ớt quan trọng trong từng byte của File ảnh bằng từng bit của message cần giấu 'Input: 1 luồng để đọc cỏc byte ảnh và 1 mảng byte của HiddenMessage.

'Output: 1 luồng chứa HiddenMessage trong file ảnh.

PublicSubhideMess(ByVal inStream As FileStream, ByVal hideMess AsByte(), ByVal outStream As FileStream)

Dim byteRead AsByte

Dim i AsInteger = 0 „i là chỉ số của mảng byte hiddenMessage

Dim j AsInteger = 0 'j là chỉ số của từng bit trong hiddenMessage(i)

Dim bit AsByte

Dim len AsLong = inStream.Length

DoWhile inStream.Position <> len byteRead = inStream.ReadByte

If i < hideMess.Length Then

'Lấy ra bit ở vị trớ thứ j của hideMess(i) bit = ClsBit.Extract(hideMess(i), j)

j += 1

„Thay thế bit vừa lấy ra cho bit tại vị trớ 0 của 1 byteRead. ClsBit.Replace(byteRead, 0, bit)

If j = 8 Then

i = i + 1

EndIf EndIf (adsbygoogle = window.adsbygoogle || []).push({});

„Ghi byte đó được thay thế bit LSB vào luồng outStream outStream.WriteByte(byteRead)

Loop

outStream.Close() inStream.Close()

EndSub

-Lớp clsCoverFile: Với chức năng chớnh là tạo ra 1 file ảnh là file ảnh gốc ban đầu nhưng cú chứa cả thụng tin ẩn trong đú.Mục đớch là tạo ra 1 file ảnh cú chứa sau nú nội dung của 1 message. Xõy dựng phương thức CreateStegoFile với 3 tham số: tờn file ảnh mới, nội dung message và password.Chỉ làm việc với ảnh bitmap : Phải kiểm tra file ảnh muốn giấu phải là ảnh Bitmap. dựa vào 2 byte đầu tiờn để xỏc định file ảnh Bitmap.

Giấu cả thụng tin về chiều dài của đoạn Message vào 4 byte đầu tiờn trong phần Data Pixel. Tức là bắt đầu từ byte thứ 54 của file ảnh sẽ lưu trữ chiều dài của message.Vậy ta xõy dựng 1 hàm đưa chiều dài của message vào 4 byte đầu tiờn , sau đú là nội dung của message dưới dạng byte. Kết quả trả về là một mảng byte. Lỳc này ta giấu cả mảng byte này vào trong file ảnh.

'Input:Mảng cần chứa thụng tin cần giấu.

'Output: Trả về mảng byte gồm 4 byte đầu chứa chiều dài của mess, cũn lại là cỏc byte mess.

PrivateFunction AddLenghAHead(ByVal messByte() AsByte) AsByte()

Dim len AsInteger = messByte.Length

'Khai bỏo mảng bLen(), phẩn tử đầu tiờn là gt (len), mảng gồm 4 bytes.

Dim bLen AsByte() = BitConverter.GetBytes(len)

Dim ret AsByte() = NewByte(len + bLen.Length) {}

Dim i AsInteger

'Add toàn bộ giỏ trị mảng bLen() vào mảng ret()

For i = 0 To bLen.Length - 1 ret(i) = bLen(i)

Next

'Cỏc phẩn tử tiếp theo của ret() mang gt của messByte()

For i = 0 To messByte.Length - 1

ret(i + bLen.Length) = messByte(i)

Next Return ret

EndFunction

Xõy dựng 2 hàm CreateStegoFile nhưng với tham số khỏc nhau. 1 hàm với message truyền vào là một chuỗi, 1 hàm khỏc với message là một mảng cỏc byte.Với tham số message là một chuỗi:

Function CreateStegoFile(ByVal stegoFileName As String, ByVal mess As String, ByVal pass As String) As ClsStegoFile

'Tạo luồng để đọc file

Dim inStream As FileStream = New FileStream(fileName, FileMode.Open, FileAccess.Read) „Kiểm tra đõy cú phải là file ảnh Bitmap

Dim kt1, kt2 As Char

kt1 = Chr(inStream.ReadByte) 'ChrW kt2 = Chr(inStream.ReadByte) If kt1 <> "B" And kt2 <> "M" Then

MessageBox.Show("Đõy khụng phải là file ảnh Bitmap", "Chỳ ý", MessageBoxButtons.OK) Return New ClsStegoFile("", pass) 'Trả ra 1 đối tượng ko tờn của ClsStegoFile

Exit Function End If (adsbygoogle = window.adsbygoogle || []).push({});

'Đọc phần tiờu đề của file ảnh Dim offset As Integer = 54

Dim Header() As Byte = New Byte(offset) {} inStream.Seek(0, SeekOrigin.Begin)

' Đọc từng khối byte từ luồng inStream và write ra buffer

inStream.Read(Header, 0, offset) ' Đọc từ 0 đến offset-1 (offset+Count-1) 'Ghi phần tiờu đề này vào 1 luồng mới lấy dữ liệu từ buffer

Dim outStream As FileStream = New FileStream(stegoFileName, FileMode.Create, FileAccess.Write) outStream.Write(Header, 0, offset)

Dim unicode As UTF8Encoding = New UTF8Encoding(True) Dim messByte() As Byte

messByte = AddLenghAHead(unicode.GetBytes(mess)) 'MsgBox(unicode.GetBytes(mess).Length)

'MsgBox(unicode.GetString(messByte)) Dim lsb As New ClsLSB

messByte = ClsCryptoHelper.Encrypt(messByte, pass) lsb.hideMess(inStream, messByte, outStream)

outStream.Close() inStream.Close()

MsgBox("Bạn đó giấu thụng tin thành cụng.", , "Thụng bỏo !") Return New ClsStegoFile(stegoFileName, pass)

End Function

Với tham số message là một mảng cỏc byte:

Function CreateStegoFile(ByVal stegoFileName As String, ByVal message() As Byte, ByVal pass As String) As ClsStegoFile

'Tạo luồng để đọc file

Dim inStream As FileStream = New FileStream(fileName, FileMode.Open, FileAccess.Read) 'Kiểm tra đõy cú phải là file ảnh Bitmap

Dim kt1, kt2 As Char

kt1 = Chr(inStream.ReadByte) kt2 = Chr(inStream.ReadByte) If kt1 <> "B" And kt2 <> "M" Then

MsgBox("Đõy khụng phải là file ảnh Bitmap", MsgBoxStyle.Exclamation) Return New ClsStegoFile("", pass)

Exit Function End If

'Đọc phần tiờu đề của file ảnh Dim offset As Integer = 54

Dim header() As Byte = New Byte(offset) {}

inStream.Seek(0, SeekOrigin.Begin) 'inStream.Seek(0, 0) inStream.Read(header, 0, offset)

'Ghi phần tiờu đề này vào 1 luụng mới

Dim outStream As FileStream = New FileStream(stegoFileName, FileMode.Create, FileAccess.Write)

outStream.Write(header, 0, offset) Dim messByte() As Byte

Dim uni As UTF8Encoding = New UTF8Encoding messByte = AddLenghAHead(message)

Dim lsb As New ClsLSB

messByte = ClsCryptoHelper.Encrypt(messByte, pass) lsb.hideMess(inStream, messByte, outStream)

outStream.Close() inStream.Close() outStream.Dispose() inStream.Dispose() (adsbygoogle = window.adsbygoogle || []).push({});

MsgBox("Bạn đó giấu thụng tin thành cụng.", , "Thụng bỏo !") Return New ClsStegoFile(stegoFileName, pass)

End Function

Sở dĩ xõy dựng thờm phương thức này vỡ cú thể ỏp dụng giấu cả 1 file text, file văn bản hoặc một file ảnh vào trong một ảnh. Do vậy khi ta đọc những file này thỡ sẽ thu được mảng cỏc byte. Và khi giấu là ta giấu trực tiếp luụn một mảng cỏc byte đú. Thực chất hàm CreateStegoFile với tham số message là một chuỗi cũng là giấu một mảng cỏc byte, phải thụng qua một bước chuyển đổi.

Lớp ClsCryptoHelper: Cú một phương thức “Encrypt” mó hoỏ thụng tin giấu được xỏc nhận bằng Password

Gồm phương thức mó hoỏ 2 tham số: Tham số thứ 1 là thụng tin mó hoỏ dưới dạng mảng byte (mess) ,Tham số thứ 2 chớnh là mật khẩu dựng để mó hoỏ (pass). Được gọi từ hàm EncryptDecrypt .Password nhập vào sẽ được dựng làm khoỏ cho mó hoỏ. Dựng lớp Rfc2898DeriveBytes làm trung gian để chuyển Password từ dạng chuỗi sang dạng mảng cỏc byte.

Public Shared Function EncryptDecrypt(ByVal mess As Byte(), ByVal pass As String) As Byte() 'Dim passwordLength As Integer = pass.Length

Dim salt As Byte() = {0, 5, 1, 2, 1, 9, 8, 5} '8 bytes ngẫu nhiờn

„Dựng lớp Rfc2898DeriveBytes làm trung gian để chuyển Password từ dạng chuỗi sang dạng mảng cỏc byte

Dim retMessage As Byte() = New Byte(mess.Length) {} Try

Dim key As Byte() = pdb.GetBytes(64) 'pdb.getBytes(128) Dim i As Integer

For i = 0 To mess.Length - 1 Dim index As Integer index = 1 Mod key.Length

retMessage(i) = CByte(key(index) Xor mess(i)) Next

Catch ex As Exception End Try

Return retMessage End Function

3.3.3 Cài đặt chức năng lấy thụng tin từ ảnh

Lớp clsLSB: Cú mộthàm “ShowMess” lấy ra byte được thay thế trong từng byte ảnh Begin

Một phần của tài liệu Một số phương pháp giấu tin trong tài liệu số hóa (Trang 59)