Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/21: Рейтинг темы: голосов - 21, средняя оценка - 4.90
2 / 2 / 0
Регистрация: 29.05.2018
Сообщений: 10

Стеганография(метод White space)

24.08.2021, 11:19. Показов 4741. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.

Хотела реализовать метод сокрытия сообщения с помощью пробелов.
Кратко: берется скрытое сообщение -> переводиться в бинарный формат -> далее берется текст-контейнер -> каждый 0 равен 2 пробелам, каждый 1 равен - 3 пробелам.

В моей работе, считывается сообщение из файла, потом переводиться в бинарный формат. Далее считывается контейнер из файла, записывается каждый параграф в массив, а с массива в переменную записывается как строка (и так по очереди).
Столкнулась с проблемой, что в питоне строка не меняется, а значит что изменяя в цикле строку, она не поменяет длину в условиях цикла. Было решено тогда взять цикл while, но напихав в него условия, когда он должен выходить из цикла, он (по моему мнению) их пропускает и продолжает работу.

*В работе использую "+++" чтоб видеть наглядно, как меняется текст, в дальнейшем хотела их изменить на пробелы.
Каждый раз выходит такая ошибка:
Traceback (most recent call last):
File ".....PythonPrj\whiteSpaceM\main.py" , line 28, in <module>
if inText[j] == ' ' and con[iCon] == '1':
IndexError: string index out of range


Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import docx
#------------------------------------
inf = open('zonojums.txt', 'r')
line = inf.readline().replace(' ', '')
print(line)
con = ' '.join(format(ord(x), 'b') for x in line)
inf.close()
print(con)
#------------------------------------
doc = docx.Document('iesniegums.docx')
#print(len(doc.paragraphs))
 
textD = []
for paragraph in doc.paragraphs:
    textD.append(paragraph.text)
print('\n'.join(textD))
 
inText = ''
iCon = 0
for i in range(len(textD)):
    inText = textD[i]
    j = 0
    while inText != '':
        if len(inText) < j:
            break
        if con[iCon] == ' ':
            iCon += 1
        if inText[j] == ' ' and con[iCon] == '1':
            inText = inText[:j] + '+++' + inText[j + 1:]
            iCon += 1
        elif inText[j] == ' ' and con[iCon] == '0':
            inText = inText[:j] + '++' + inText[j + 1:]
            iCon += 1
        j += 1
    textD[i] = inText
print('\n'.join(textD))
#----------------------------------
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.08.2021, 11:19
Ответы с готовыми решениями:

Свойство white-space
white-space: pre; Свойство сохраняет все переносы без html кода. Хорошо, что если в блоке есть пустые строчки которые необходимо...

Required white space was missing
XML выдает такую ошибку «ошибка DOM Parse error &quot;Required white space was missing.&quot; at 9334:19 (430806) &quot; &lt;job...

IE css свойство white-space: nowrap
Добрый вечер! Возникла проблема при верстке странички под браузер IE, проблема со свойством white-space: nowrap; Допустим имеется код: ...

3
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
24.08.2021, 11:39
ProgramGirl, replace() ?
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
24.08.2021, 11:58
Лучший ответ Сообщение было отмечено ProgramGirl как решение

Решение

Цитата Сообщение от ProgramGirl Посмотреть сообщение
Столкнулась с проблемой, что в питоне строка не меняется,
Можно превратить строку в список символов.
Python
1
2
3
>>> list("символьная строка")
['с', 'и', 'м', 'в', 'о', 'л', 'ь', 'н', 'а', 'я', ' ', 'с', 'т', 'р', 'о', 'к', 'а']
>>>
Можно превратить строку в байтовый массив (но тут проблема с многобайтовыми символами).

Можно из ctypes использовать изменяемый строковой буфер.
Code
1
2
ctypes.create_unicode_buffer(init_or_size, size=None):
Функция ctypes.create_unicode_buffer() создает изменяемый буфер символов Юникода. Возвращенный объект представляет собой массив ctypes.c_wchar.
Python
1
2
3
4
5
6
7
8
>>> import ctypes
>>> buff = ctypes.create_unicode_buffer("символьная строка")
>>> buff.value
'символьная строка'
>>> buff[0]="а"
>>> buff.value
'аимвольная строка'
>>>
1
2 / 2 / 0
Регистрация: 29.05.2018
Сообщений: 10
25.08.2021, 12:02  [ТС]
Цитата Сообщение от Garry Galler Посмотреть сообщение
Можно превратить строку в список символов.
Боже, Вы избавили меня от мучений. Просто большая благодарность вам!

Я использовала две переменные, в которую записывала строку, и в другой делала ее списком. Выглядит не очень, коряво все. Но работает!

Ниже предоставлен код с последними изменениями. Может быть кому то пригодится.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import docx
#------------------------------------
inf = open('zonojums.txt', 'r')
line = inf.readline().replace(' ', '')
print(line)
con = ' '.join(format(ord(x), 'b') for x in line)
inf.close()
print(con)
#------------------------------------
doc = docx.Document('iesniegums.docx')
#print(len(doc.paragraphs))
 
textD = []
for paragraph in doc.paragraphs:
    textD.append(paragraph.text)
print('\n'.join(textD))
 
inText = []
line2 = ''
iCon = 0
for i in range(len(textD)):
    line2 = textD[i]
    inText = list(line2)
    for j in range(len(inText)):
        if con[iCon] == ' ':
            iCon += 1
        if inText[j] == ' ' and con[iCon] == '1':
            inText[j] = '   '
            iCon += 1
        if inText[j] == ' ' and con[iCon] == '0':
            inText[j] = '  '
            iCon += 1
    textD[i] = ''.join(inText)
print('\n'.join(textD))
#----------------------------------
########################################################################################################################
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.08.2021, 12:02
Помогаю со студенческими работами здесь

White-space: какая разница между pre-line и normal?
Доброго дня! Читаю про white-space, пробую в коде pre-line и normal. Перенос строк автоматический, пробелы сохраняются только по одному...

Что такое white-space:wrap; новинка или опечатка автора?
Попался такой стиль к таблице .longTable{ border-collapse: collapse; border-color: #F942F7; width: 25%; ...

Перенос строки при white-space:pre-wrap и заданной ширине блока
Добрый день! Если при заданной ширине блока white-space:pre-wrap; width:500px; Я, насколько понимаю, строки должный...

Что значит background: linear-gradient(white, white) 0 / var(--pos) no-repeat, grey;
Здравствуйте, помогите пж разобратся как работает ето строчка background: linear-gradient(white, white) 0 / var(--pos) no-repeat, grey; ...

Стеганография. Метод Коха и Жао
Метод Коха и Жао. Реализую на C#. Хотел заказать в разделе фриланса, но пообщавшись с форумчанином Ev_Hyper , понял, что тема не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20%
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru