Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Реализация стеганографического алгоритма замены LSB на VB.NET

Войти
Регистрация
Восстановить пароль
Всякое по IT
Рейтинг: 3.67. Голосов: 3.

Реализация стеганографического алгоритма замены LSB на VB.NET

Запись от SergProgrammer размещена 24.06.2017 в 12:30
Обновил(-а) SergProgrammer 04.08.2017 в 12:55

Доброго времени суток, уважаемые форумчане! Я уже давно занимаюсь темой стеганографии и уже давно реализовал метод LSB на vb.net.
Немного теории: LSBСтеганография.
Ну, я думаю немногие собрались читать эту теорию, поэтому для ленивых(впрочем таких-же как и я) я объясню всё максимально просто.

Q:Почему метод называется LSB и почему именно он?
A:Байт состоит из 8-ми бит, к примеру: 00001111, что в переводе в десятеричную систему значит 15. Видите жирным выделено 0 и 1? Самый первый в записи бит принято называть MSB, когда 8-мой бит - LSB.

Q:Почему заменять именно последний бит в байте? Я же могу взять, и изменить к примеру, первый!
A:Мы изменяем последний бит байта поскольку при таком изменении значение меняется настолько мало, что далеко на каждый монитор способен отобразить такие изменения, да и насколько я знаю человеческий глаз вообще неспособен увидеть такие изменения(но лично я не замечал)

Ну, я думаю что всё объяснил, теперь к коду. Будут вопросы - пишите, я отвечу


Допустим, мы получили массив RGB всех пикселей изображения в массиве
vb.net
1
Dim img_bytes As Byte()
Читаем байт(для последующих изменения)
vb.net
1
FileByte = img_bytes(fp)
Как писать информацию? Для начала надо последний бит "выставить" в ноль. Я делал это логической операцией И(если есть иные способы напишите в комментарии).
vb.net
1
Dim preEditByte As Byte = CByte(FileByte And 254)
После того как мы поучили готовый байт нам требуется использовать логическое ИЛИ.
vb.net
1
img_bytes(fp) = CByte(preEditByte Or (data Mod 2))
Почему тут data Mod 2? Мы должны получить всего один бит от байта, а способа проще я не нашёл.
Что за fp? Я предполагаю что мы выполняем операцию в цикле, а fp - указывает текущую позицию(я не знаю как подробнее объяснить, но к примеру изображения bitmap(*.bmp) в большинстве случаев с 54-ого байта сохраняются в модели RGB, то есть 55-ый байт значение красного в первом пикселе, 56-ой байт - зелёного в первом пикселе и так далее.)

После внесённого изменения требуется "подготовить" data к следующему кругу и конечно увеличить fp
vb.net
1
2
data= CByte(data\ 2)
fp += 1
Вот готовый код записи(не функция, а фрагмент):
vb.net
1
2
3
4
5
6
7
8
9
10
11
For j = 1 To DataLen
    data = encdata(j - 1)'encdata as Byte() - массив предоставляемый функции, содержащий байты информации для записи
    For i = 1 To 8
        FileByte = img_bytes(fp)'Dim FileByte As Byte объявил ранее, в начале функции, а вы сами
        Dim preEditByte As Byte = CByte(FileByte And 254)
        img_bytes(fp) = preEditByte Or (data Mod 2)
        data = CByte(data \ 2)
        fp += 1
    Next i
    'тут можно менять прогресс записи
Next j
Фух, с записью вроде разобрались!


Читаем байт
vb.net
1
FileByte = img_bytes(fp)
Проверяем, последний бит - 1? Если да, логическим ИЛИ выставляем 1, иначе оставляем 0
vb.net
1
If (FileByte And 1) = 1 Then data = data Or bit

Не по теме:

Or bit - совпадение или зговор?



Если bit < 128(2^7, поскольку даже если значение 129 сдвиг невозможен - 129 = 10000001!!!) то делаем сдвиг вправо(последний бит стает седьмым)
vb.net
1
If bit < 128 Then bit = CByte(bit * 2)
Не забываем увеличить fp
vb.net
1
fp += 1
И ОБЯЗАТЕЛЬНО "запоминаем" информацию которую считали
vb.net
1
2
3
4
    Next i
    ReDim Preserve decrtext(j - 1)
    decrtext(j - 1) = data
Next j
Вот фрагмент для считывания
vb.net
1
2
3
4
5
6
7
8
9
10
11
12
13
For j = 1 To len
    bit = 1
    symbol = 0
    For i = 1 To 8
        FileByte = img_bytes(fp)
        If (FileByte And 1) = 1 Then data = data Or bit
        If bit < 128 Then bit = CByte(bit * 2)
        fp += 1
    Next i
    'тут тоже можно менять прогресс
    ReDim Preserve decrtext(j - 1)
    decrtext(j - 1) = data
Next j
Спасибо что прочитали
Эта запись и на Хабрахабр
Размещено в Без категории
Просмотров 401 Комментарии 2
Всего комментариев 2

Комментарии

  1. Старый комментарий
    Аватар для SergProgrammer
    /delete
    Запись от SergProgrammer размещена 24.06.2017 в 16:28 SergProgrammer вне форума
    Обновил(-а) SergProgrammer 25.06.2017 в 10:02
  2. Старый комментарий
    Аватар для SergProgrammer
    Рейтинг статьи - 3 звезды
    Скажите пожалуйста что я сделал не так
    Запись от SergProgrammer размещена 26.06.2017 в 21:52 SergProgrammer вне форума
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru