Я пытаюсь скрыть текст UTF8 внутри каналов RGB внутри QImage, разделяя каждый байт на 4 байта, на два целых числа без знака, повторяя до конца сообщения, примерно так:
0xFFAABBCC 0xFFAABBCC
Проблема в том, что то я не уверен, что структура памяти, возвращаемая QImage::bits(), представляет собой непрерывный поток значений QRgb с сохраненным порядком байтов. Если нет, то это может объяснить, почему приведенный ниже код, который работал с непрерывным вектором, не работает, если он адаптирован для работы с QImage::bits.
Вот рабочая тестовая программа, использующая вектор :
#include
#include
#include
#include
#include
using namespace std;
string unpack_msg_bitset(vector input)
{
using position_t = size_t;
string result(input.size()*2,0);
for (size_t block_index=0; block_index < input.size()-1; block_index+=2) {
bitset argb1{input[block_index]};
bitset argb2{input[block_index+1]};
bitset msg_char{0};
msg_char.set(position_t(0), argb1.test(position_t(32-15)));
msg_char.set(position_t(1), argb1.test(position_t(32-16)));
msg_char.set(position_t(2), argb1.test(position_t(32-23)));
msg_char.set(position_t(3), argb1.test(position_t(32-24)));
msg_char.set(position_t(4), argb1.test(position_t(32-31)));
msg_char.set(position_t(5), argb1.test(position_t(32-32)));
msg_char.set(position_t(6), argb2.test(position_t(32-15)));
msg_char.set(position_t(7), argb2.test(position_t(32-16)));
char ch = static_cast(msg_char.to_ulong());
result.append(1,ch);
}
return result;
}
vector pack_msg_bitset(string msg)
{
using position_t = size_t;
vector result = {
0xffABC4E5,0xffABC4E5,0xffABC4E5,0xffABC4E5,0xffABC4E5,0xffABC4E5,
0xffABC4E5,0xffABC4E5,0xffABC4E5,0xffABC4E5,0xffABC4E5,0xffABC4E5,
0xffABC4E5,0xffABC4E5,0xffABC4E5,0xffABC4E5,0xffABC4E5,0xffABC4E5,
0xffABC4E5,0xffABC4E5,0xffABC4E5,0xffABC4E5,0xffABC4E5,0xffABC4E5,
};
int block_index=0;
for (size_t i=0; i < msg.size(); i++) {
if (block_index >= result.size() - 1) {
break;
}
bitset argb1{result[block_index]};
bitset argb2{result[block_index+1]};
bitset msg_char{msg};
argb1.set(position_t(32-15), msg_char[0]);
argb1.set(position_t(32-16), msg_char[1]);
argb1.set(position_t(32-23), msg_char[2]);
argb1.set(position_t(32-24), msg_char[3]);
argb1.set(position_t(32-31), msg_char[4]);
argb1.set(position_t(32-32), msg_char[5]);
argb2.set(position_t(32-15), msg_char[6]);
argb2.set(position_t(32-16), msg_char[7]);
result[block_index] = static_cast(argb1.to_ulong());
result[block_index+1] = static_cast(argb2.to_ulong());
block_index += 2;
}
return result;
}
int main()
{
auto elems = pack_msg_bitset("bush hid");
cout
Подробнее здесь: https://stackoverflow.com/questions/797 ... gonography
Попытка распределить символы по битам в изображении (стеганография) ⇐ C++
Программы на C++. Форум разработчиков
-
Anonymous
1760423111
Anonymous
Я пытаюсь скрыть текст UTF8 внутри каналов RGB внутри QImage, разделяя каждый байт на 4 байта, на два целых числа без знака, повторяя до конца сообщения, примерно так:
0xFF[b]AABBCC[/b] 0xFF[b]AA[/b]BBCC
Проблема в том, что то я не уверен, что структура памяти, возвращаемая QImage::bits(), представляет собой непрерывный поток значений QRgb с сохраненным порядком байтов. Если нет, то это может объяснить, почему приведенный ниже код, который работал с непрерывным вектором, не работает, если он адаптирован для работы с QImage::bits.
Вот рабочая тестовая программа, использующая вектор :
#include
#include
#include
#include
#include
using namespace std;
string unpack_msg_bitset(vector input)
{
using position_t = size_t;
string result(input.size()*2,0);
for (size_t block_index=0; block_index < input.size()-1; block_index+=2) {
bitset argb1{input[block_index]};
bitset argb2{input[block_index+1]};
bitset msg_char{0};
msg_char.set(position_t(0), argb1.test(position_t(32-15)));
msg_char.set(position_t(1), argb1.test(position_t(32-16)));
msg_char.set(position_t(2), argb1.test(position_t(32-23)));
msg_char.set(position_t(3), argb1.test(position_t(32-24)));
msg_char.set(position_t(4), argb1.test(position_t(32-31)));
msg_char.set(position_t(5), argb1.test(position_t(32-32)));
msg_char.set(position_t(6), argb2.test(position_t(32-15)));
msg_char.set(position_t(7), argb2.test(position_t(32-16)));
char ch = static_cast(msg_char.to_ulong());
result.append(1,ch);
}
return result;
}
vector pack_msg_bitset(string msg)
{
using position_t = size_t;
vector result = {
0xffABC4E5,0xffABC4E5,0xffABC4E5,0xffABC4E5,0xffABC4E5,0xffABC4E5,
0xffABC4E5,0xffABC4E5,0xffABC4E5,0xffABC4E5,0xffABC4E5,0xffABC4E5,
0xffABC4E5,0xffABC4E5,0xffABC4E5,0xffABC4E5,0xffABC4E5,0xffABC4E5,
0xffABC4E5,0xffABC4E5,0xffABC4E5,0xffABC4E5,0xffABC4E5,0xffABC4E5,
};
int block_index=0;
for (size_t i=0; i < msg.size(); i++) {
if (block_index >= result.size() - 1) {
break;
}
bitset argb1{result[block_index]};
bitset argb2{result[block_index+1]};
bitset msg_char{msg[i]};
argb1.set(position_t(32-15), msg_char[0]);
argb1.set(position_t(32-16), msg_char[1]);
argb1.set(position_t(32-23), msg_char[2]);
argb1.set(position_t(32-24), msg_char[3]);
argb1.set(position_t(32-31), msg_char[4]);
argb1.set(position_t(32-32), msg_char[5]);
argb2.set(position_t(32-15), msg_char[6]);
argb2.set(position_t(32-16), msg_char[7]);
result[block_index] = static_cast(argb1.to_ulong());
result[block_index+1] = static_cast(argb2.to_ulong());
block_index += 2;
}
return result;
}
int main()
{
auto elems = pack_msg_bitset("bush hid");
cout
Подробнее здесь: [url]https://stackoverflow.com/questions/79789869/trying-to-spread-characters-across-bits-in-a-qimage-stegonography[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия