Регистрация: 23.10.2013
Сообщений: 5,076
Записей в блоге: 8

Перестановочный шифр

26.03.2017, 09:23. Показов 2423. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Перестановочных шифров много. Это один из наиболее
простых. Суть алгоритма в том, что сначала пишутся
символы стоящие на нечетных позициях, потом на четных.
...
Вопросы
1. Как упростить код, приведенный ТС?
2. Как будет выглядеть программа дешифровки?

QBasic/QuickBASIC
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
REM
REM Перестановочный шифр
REM
 
CLS
CONST p = " "
DIM T AS STRING
DIM S AS STRING
DIM u AS STRING
T = "1234567890098765432"
 
IF LEN(T) MOD 2 THEN T = T + p
S = T
 
k = LEN(T) / 2
 
FOR i = 1 TO LEN(T)
   u = MID$(T, i, 1)
   IF i MOD 2 THEN
      j = (i + 1) / 2
      MID$(S, j, 1) = u
   ELSE
      j = k + i / 2
      MID$(S, j, 1) = u
   END IF
NEXT
 
PRINT T
PRINT S
END
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.03.2017, 09:23
Ответы с готовыми решениями:

Написать программу Перестановочный шифр с ключевым словом
Помогите написать программу по VBA. На "WORD или Ексель" На Ваше усмотрение . Тема "Перестановочный шифр с ключевым словом."....

Шифр многоалфавитной замены (Вижнера) и шифр алфавитной замены
Напишите пожалуйста 2 программы в VB шифр многоалфавитной замены (Вижнера) и шифр алфавитной замены;) ОЧЕНЬ НАДО!!!;((((:(

Перестановочный шифр
Подскажите пожалуйста, как перебрать порядок цифр ключа(4ххх5 (известны 2 цифры ключа, остается перебрать 3!(6 вариантов))), и подключить...

6
6180 / 945 / 313
Регистрация: 25.02.2011
Сообщений: 1,381
Записей в блоге: 1
26.03.2017, 09:32
Лучший ответ Сообщение было отмечено echs как решение

Решение

Делал кодер и декодер на VBA: Написать программу Перестановочный шифр с ключевым словом
Под QB нужно будет немного изменить код (функции Join в QB нет)
1
Регистрация: 23.10.2013
Сообщений: 5,076
Записей в блоге: 8
26.03.2017, 09:39  [ТС]
m-ch
Спасибо! Вы привели классный пример. Кстати его
нетрудно реализовать на QBasic. Функцию Join()
написать несложно, да на QB своих функций достаточно...
0
6180 / 945 / 313
Регистрация: 25.02.2011
Сообщений: 1,381
Записей в блоге: 1
26.03.2017, 09:49
Лучший ответ Сообщение было отмечено echs как решение

Решение

Цитата Сообщение от echs Посмотреть сообщение
Кстати его
нетрудно реализовать на QBasic. Функцию Join() написать несложно
Функцию Join не нужно переписывать в QB (т.к. у нее больше функционала), здесь достаточно циклом пройти по массиву и составить текстовую строку.
Думаю, что под QB будет легко адаптировать
1
Регистрация: 23.10.2013
Сообщений: 5,076
Записей в блоге: 8
26.03.2017, 09:53  [ТС]
m-ch
Я тоже так подумал. Склеить массив в строку достаточно
просто. Взять цикл и операция конкатенации + или &.
0
6180 / 945 / 313
Регистрация: 25.02.2011
Сообщений: 1,381
Записей в блоге: 1
26.03.2017, 10:16
Лучший ответ Сообщение было отмечено echs как решение

Решение

Переписал под Freebasic
QBasic/QuickBASIC
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
DECLARE FUNCTION MyEncode(txt AS STRING, KEY AS STRING) AS STRING
DECLARE FUNCTION MyDecode(txt AS STRING, KEY AS STRING) AS STRING
 
DIM txt AS STRING, KEY AS STRING, txt2 AS STRING
txt = "1234567890098654321"
 
KEY = "text"
txt2 = MyEncode(txt, KEY)
PRINT txt, KEY
PRINT txt2
PRINT MyDecode(txt2, KEY)
PRINT
 
KEY = "123456"
txt2 = MyEncode(txt, KEY)
PRINT txt, KEY
PRINT txt2
PRINT MyDecode(txt2, KEY)
PRINT
 
'Sleep
 
FUNCTION MyEncode(txt AS STRING, KEY AS STRING) AS STRING
    DIM i AS LONG, j AS LONG, n AS LONG, m AS LONG, l AS LONG
    DIM s1 AS STRING, s2 AS STRING, outTxt AS STRING
    n = LEN(KEY)
    IF n = 0 THEN EXIT FUNCTION
    l = LEN(txt)
    m = -INT(-l / n)
    
    DIM nKeys(1 TO n) AS LONG
    FOR i = 1 TO n
        s1 = MID$(KEY, i, 1)
        FOR j = 1 TO n
            s2 = MID$(KEY, j, 1)
            IF s1 > s2 OR (s1 = s2 AND j <= i) THEN nKeys(i) = nKeys(i) + 1
    NEXT j, i
    
    DIM aOut(1 TO n * m) AS STRING
    FOR i = 1 TO LEN(txt)
        aOut(nKeys((i - 1) MOD n + 1) * m + (i - 1) \ n - m + 1) = MID$(txt, i, 1)
    NEXT i
    FOR i = 1 TO n * m
         outTxt = outTxt + aOut(i)
    NEXT i
    MyEncode = outTxt
END FUNCTION
 
FUNCTION MyDecode(txt AS STRING, KEY AS STRING) AS STRING
    DIM i AS LONG, j AS LONG, d AS LONG, k AS LONG, n AS LONG, m AS LONG
    DIM l AS LONG, nTmp AS LONG, sTmp AS STRING, outTxt AS STRING
    n = LEN(KEY)
    IF n = 0 THEN EXIT FUNCTION
    l = LEN(txt)
    m = -INT(-l / n)
    d = l MOD n
 
    DIM nKeys(1 TO n)  AS LONG, sKeys(1 TO n) AS STRING
    FOR i = 1 TO n
        nKeys(i) = i
        sKeys(i) = MID$(KEY, i, 1)
        FOR j = 1 TO i - 1
            IF sKeys(i) < sKeys(j) THEN
                sTmp = sKeys(i): sKeys(i) = sKeys(j): sKeys(j) = sTmp
                nTmp = nKeys(i): nKeys(i) = nKeys(j): nKeys(j) = nTmp
            END IF
    NEXT j, i
    
    DIM aOut(1 TO n, 1 TO m) AS STRING
    FOR i = 1 TO n
        FOR j = 1 TO m + (nKeys(i) > d AND d > 0)
            k = k + 1
            aOut(nKeys(i), j) = MID$(txt, k, 1)
    NEXT j, i
    FOR j = 1 TO m
        FOR i = 1 TO n
            outTxt = outTxt + aOut(i, j)
    NEXT i, j
    MyDecode = outTxt
END FUNCTION
Не могу проверить в QB, нужно в декларировании функций по другому указывать их тип
1
Регистрация: 23.10.2013
Сообщений: 5,076
Записей в блоге: 8
26.03.2017, 11:44  [ТС]
m-ch
Огромное вам спасибо! В QB это уже просто.
Тип функции задаётся символами %, &, !, #, $
(то есть целый, целый длинный, вещественный,
вещественный двойной и строковый). Эти символы
добавляются к имени функции при декларации.
например
DECLARE FUNCTION f$(x!) - строковая функция f(x)
от вещественного переменного.
СПАСИБО ВАМ ЕЩЁ РАЗ ЗА КОД !!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.03.2017, 11:44
Помогаю со студенческими работами здесь

перестановочный шифр
Доброе время суток! Помогите написать программу на Delphi используя шифр перестановки, например ступенчатый шифр: вводим: go to home ...

Перестановочный шифр.
На основе этого мне нужно написать рабочий код на С++. Материал прочитан на несколько раз и уже выдвинуто множество идей, код пишется, но...

Перестановочный шифр
Добрый вечер! Реализовал шифрование с помощью перестановочного шифра, а вот с дешифровкой запутался, вроде и не сложно, но не получается...

Столбцевой перестановочный шифр
Здравствуйте, помогите, пожалуйста. Нужно реализовать простой столбцевой перестановочный шифр. ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ВЫЧИСЛИТЕЛЬНОЙ...

Простой столбцевой перестановочный шифр
Помогите пожалуйста написать программу. В данном виде шифра текст пишется на горизонтально разграфленном листе бумаги фиксированной...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

Новые блоги и статьи
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: показать затраченные материалы за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В качестве. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru