Форум программистов, компьютерный форум, киберфорум
Python
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/34: Рейтинг темы: голосов - 34, средняя оценка - 4.56
17 / 17 / 11
Регистрация: 17.03.2017
Сообщений: 109

Кузнечик

28.05.2017, 23:23. Показов 7265. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть проблема, при шифровании русского текста(кириллицы) подскажите как ее решить
Пример:
Python
1
2
3
4
5
6
7
8
9
>>> encrypt('hello world')
b'\xca\xc6;\xb5\x9e\xd1h<\xfd`M\xba\x84\xb1\x0f\xc5'
>>> decrypt(b'\xca\xc6;\xb5\x9e\xd1h<\xfd`M\xba\x84\xb1\x0f\xc5')
'hello world     '
>>> encrypt('привет')
b'\x05Nl(L\x94\xba\x08Eg$#:\x18\x19m'
>>> decrypt(b'\x05Nl(L\x94\xba\x08Eg$#:\x18\x19m')
'Cô@C\x842CTB       '
>>>
Шифр:
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
from pygost.gost3412 import *
from pygost.utils import *
import random
abc='abcdefghijklmnopqrstuvwxyz'
enhex = lambda x:''.join(hex(ord(i))[2:] for i in x)
deHex = lambda x:''.join(chr(int(x[i:i+2],16)) for i in range(0,len(x),2))
randomKey = lambda :enhex(''.join(random.choice(abc) for i in range(32)))
 
key = hexdec(randomKey())
x=GOST3412Kuz(key)
 
def encrypt(text):
    ans=b''
    for i in range(0,len(text),16):
        st=text[i:i+16]
        if len(st)<16:
            st=st+' '*(16-len(st))
        ans+= x.encrypt(bytearray(hexdec(enhex(st))))
    return ans
def decrypt(encText):
    ans=''
    for i in range(0,len(encText),16):
        st=encText[i:i+16]
        if len(st)!=16:
            print('Error 1')
            break
        ans+= deHex(hexenc(x.decrypt(encText)))
    return ans
pygost можно скачать с помощью pip

Добавлено через 1 минуту
небольшой мануал
Python
1
2
3
4
5
6
7
8
from pygost.gost3412 import *
from pygost.utils import *
key = hexdec("8899aabbccddeeff0011223344556677fedcba98765432100123456789abcdef")
x=GOST3412Kuz(key)
 
blk = bytearray(hexdec('12039abcdef12029112930123abcdeff'))
encText = x.encrypt(blk)
decText = hexenc(x.decrypt(encText))
Добавлено через 4 минуты
+ есть проблема с \n \t и т.д.

Добавлено через 41 минуту
все дело в переводе кириллицы в hex и обратно
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.05.2017, 23:23
Ответы с готовыми решениями:

K-кузнечик
Ограничение по времени работы программы: 1 секунда Кузнечик умеет прыгать на расстояние 1, 2, … , k клеток (то есть длина прыжка...

Кузнечик
Ограничение по времени работы программы: 1 секунда Кузнечик умеет прыгать на расстояние 1, 2, … , k клеток (то есть длина прыжка...

Кузнечик-К
Кузнечик прыгает по столбикам, расположенным на одной линии на равных расстояниях друг от друга. Столбики имеют порядковые номера от 1 до n...

4
757 / 306 / 190
Регистрация: 20.05.2016
Сообщений: 593
29.05.2017, 11:55
Из приведенного мануала видно, что GOST3412Kuz.encrypt и GOST3412Kuz.decrypt аргументом принимают bytes. Так что в encrypt достаточно text перевести в байты и писать ans += x.encrypt(st), в decrypt просто - ans += x.decrypt(encText). Всё прочее (по сути) - без изменений.
0
17 / 17 / 11
Регистрация: 17.03.2017
Сообщений: 109
29.05.2017, 12:02  [ТС]
shsv, хочу с вами не согласится, так как GOST3412Kuz.encrypt и GOST3412Kuz.decrypt принимают не просто байты, а шестнадцатеричные байты. Т.е. мы не можем сделать так
Python
1
ans = x.encrypt(b'hello world')
и даже если так, проблема остается такая же:
Цитата Сообщение от Slice_ Посмотреть сообщение
все дело в переводе кириллицы в hex и обратно
Добавлено через 1 минуту
Цитата Сообщение от Slice_ Посмотреть сообщение
а шестнадцатеричные байты.
байты только от символов шестнадцатеричной системы счисления
0
757 / 306 / 190
Регистрация: 20.05.2016
Сообщений: 593
29.05.2017, 13:13
Не могу спорить.

Однако,
Кликните здесь для просмотра всего текста
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
38
39
40
41
42
43
from pygost.gost3412 import *
from pygost.utils import *
import random
 
 
enhex = lambda x:''.join(hex(ord(i))[2:] for i in x)
 
abc = 'abcdefghijklmnopqrstuvwxyz'
randomKey = lambda: enhex(''.join(random.choice(abc) for i in range(32)))
 
key = hexdec(randomKey())
x = GOST3412Kuz(key)
 
 
def encrypt(text):
    if isinstance(text, str):
        text = text.encode()
    ans = b''
    for i in range(0, len(text), 16):
        st = text[i:i + 16]
        if len(st) < 16:
            st = st + b' ' * (16 - len(st))
        ans += x.encrypt(st)
    return ans
 
 
def decrypt(encText):
    ans = b''
    for i in range(0, len(encText), 16):
        st = encText[i:i + 16]
        ans += x.decrypt(st)
    return ans.rstrip()
 
 
en = encrypt(b'hello world')
print(en)
print(decrypt(en).decode())
 
print()
 
en = encrypt('при\tвет\nпривет')
print(en)
print(decrypt(en).decode())

работает. И в приведенном мануале blk - это bytearray, а hexdec возвращает bytes (насколько я успел понять). (Это я не спорю, пытаюсь понять)
1
17 / 17 / 11
Регистрация: 17.03.2017
Сообщений: 109
29.05.2017, 13:44  [ТС]
shsv,
Цитата Сообщение от shsv Посмотреть сообщение
blk - это bytearray, а hexdec возвращает bytes
- верно. Исходя из вашего примера, понял почему он не хотел шифровать кириллицу, ее надо только енкодить(как и англ) и смотреть за длиной. Спасибо)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.05.2017, 13:44
Помогаю со студенческими работами здесь

Задача B. Кузнечик
Задача B. Кузнечик Имя входного файла: стандартный ввод Имя выходного файла: стандартный вывод Ограничение по времени: 2 секунды ...

Кузнечик и лягушки
Кузнечик прыгает по столбикам, расположенным на одной линии на равных расстояниях друг от друга. Столбики имеют порядковые номера от 1 до...

Лягушка и кузнечик
В крайних клетках полоски шириной в одну клетку и длиной в N клеток сидят лягушка и кузнечик: лягушка в клетке под номером 1,кузнечик в...

Лягушка и кузнечик
Ограничение по времени: 0.5 секунды В крайних клетках полоски шириной в одну клетку и длиной в N клеток сидят лягушка и кузнечик:...

Кузнечик и монетки
Условие: Кузнечик прыгает по столбикам, расположенным на одной линии на равных расстояниях друг от друга. Столбики имеют порядковые...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru