Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/68: Рейтинг темы: голосов - 68, средняя оценка - 4.54
2 / 2 / 0
Регистрация: 05.06.2014
Сообщений: 18

Зашифровать слово из ячейки Excel обобщенным шифром подстановки

10.10.2014, 17:39. Показов 13828. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите с заданием, пожалуйста. Не знаю с чего начать? как лучше реализовать алгоритм?

Составить процедуру, которая позволяет зашифровать слово из клетки А11. Зашифрованное слово помещается в клетку В11. Принцип шифрования следующий: имеется "новый" алфавит, представляющий собой некоторую строку - перестановку букв алфавита. Если некоторая буква является k-той буквой в обычном алфавите, то вместо нее должна быть взята буква из k-той позиции "нового" алфавита.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.10.2014, 17:39
Ответы с готовыми решениями:

Зашифровать сообщение шифром Вернама (5 бит на символ)
Зашифровать и расшифровать русскоязычное сообщение без пробелов и знаков препинания с помощью шифра Вернама (5 бит на символ). Ключом...

Зашифровать строку шифром Цезаря в зависимости от введенного пользователем значения сдвига
Всем привет. Хочу написать программу на Джаве, которая работала бы с введенным текстом, а именно "шифровала" строку шифром Цезаря...

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

19
2 / 2 / 0
Регистрация: 05.06.2014
Сообщений: 18
10.10.2014, 17:52  [ТС]
Составить процедуру, которая позволяет зашифровать слово из клетки А11. Зашифрованное слово помещается в клетку В11. Принцип шифрования следующий: имеется "новый" алфавит, представляющий собой некоторую строку - перестановку букв алфавита. Если некоторая буква является k-той буквой в обычном алфавите, то вместо нее должна быть взята буква из k-той позиции "нового" алфавита.
0
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
10.10.2014, 18:41
Шифрование заменой с использованием таблиц?
0
2 / 2 / 0
Регистрация: 05.06.2014
Сообщений: 18
10.10.2014, 18:43  [ТС]
Нет, без всяких таблиц
0
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
10.10.2014, 18:51
По-моему принцип один и тот же
Миниатюры
Зашифровать слово из ячейки Excel обобщенным шифром подстановки  
0
2 / 2 / 0
Регистрация: 05.06.2014
Сообщений: 18
10.10.2014, 19:07  [ТС]
Ну можно и так, наверное. Но для меня главнее понять алгоритм работы с текстовыми функциями, такие как Mid,Len и т.п. Как я представляю задачу: у меня есть мой особенный алфавит. Я ввожу в ячейку слово, программа обращается в ячейку, перебирает все буквы, сопоставляет порядковый номер буквы с её порядковым номером в нормальном алфавите и заменяет. Вот для меня тяжело как-то сформировать собственный алфавит? Может через код Asc и соответствующую функцию? Использовать рандом? совсем запуталась(
0
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
10.10.2014, 19:10
Цитата Сообщение от куу30 Посмотреть сообщение
Вот для меня тяжело как-то сформировать собственный алфавит?
Нужно взять "нормальный" алфавит и перемешать случайным образом
0
2 / 2 / 0
Регистрация: 05.06.2014
Сообщений: 18
10.10.2014, 19:13  [ТС]
Тогда ведь его надо как-то закрепить? чтобы определенная буква означала только одну букву в перемешанном алфавите. Т.е. если "а" имела, допустим шифр "Ы", то сколько бы я не написала "а" в слове, всегда было "Ы"
0
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
10.10.2014, 19:26
Можно генерировать рандомно от какого либо числа(ключа) чтобы перемешанный алфавит был всегда одинаков
0
2 / 2 / 0
Регистрация: 05.06.2014
Сообщений: 18
10.10.2014, 19:33  [ТС]
К сожалению, у меня пока нет таких знаний, чтобы реализовать это. Спасибо за вашу помощь)

Добавлено через 1 минуту
Я, кстати, вообще никогда не работала с буквенным рандомом. Буду изучать..
0
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
10.10.2014, 19:42
Вот, набросал код для перемешивания алфавита.
В алфавит включил все символы кириллицы и латиницы в обоих регистрах, цифры и знаки препинания. Конечно, алфавит можно урезать, если знать наверняка, что в шифруемом сообщении будут, например, только кириллические символы в нижнем регистре.
Visual Basic
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
Option Explicit
 
 
 
Sub Main()
    MsgBox GetNewAllabet(777) '777 - это число взято с потолка, является ключом к генерированию определенной последовательности
End Sub
 
Private Function GetNewAllabet(key As Integer)
    Dim i As Integer, ArrAlfaBet() As String
    Const AlfaBet As String = "абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ" & _
                          "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" & _
                          "1234567890.,<>:;!@#$%^&*()_+-=?/\}{][|' "
    ReDim ArrAlfaBet(1 To Len(AlfaBet))
    For i = 1 To Len(AlfaBet)
        ArrAlfaBet(i) = Mid(AlfaBet, i, 1)
    Next i
    Unsort ArrAlfaBet, key
    GetNewAllabet = Join(ArrAlfaBet, "")
End Function
'Процедура перемешивания массива случайным образом
Private Sub Unsort(list() As String, key As Integer)
Dim i As Long
Dim pos As Long, min As Long
Dim tmp As String, max As Long
Rnd (-key)
min = LBound(list): max = UBound(list)
    For i = min To max - 1
        pos = Int((max - i + 1) * Rnd + i)
        tmp = list(pos)
        list(pos) = list(i)
        list(i) = tmp
    Next i
End Sub
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
10.10.2014, 20:12
Другого и быть не может:
Организовать цикл по всем элементам строки с заменой каждой буквы буквой из нового алфафита.
0
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
10.10.2014, 20:26
Вариант
Visual Basic
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
Option Explicit
Const KeyWord As Integer = 777 '777 - это число является ключом к генерированию определенной последовательности
Const AlfaBet As String = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя1234567890"
                          
Sub Main()
    Dim S As String, St As String, i As Integer
    Cells(4, 1) = AlfaBet                'в ячейку А4 выводим  алфавит
    Cells(5, 1) = GetNewAlfaBet(KeyWord) 'в ячейку А5 выводим перемешанный алфавит
    
    'шифровка
    S = Cells(11, 1) 'берем строку из ячейки А11
    For i = 1 To Len(S)  'Заменяем символы строки символами нового алфавита
            St = St & Mid(AlfaBet, (InStr(1, GetNewAlfaBet(KeyWord), Mid(S, i, 1))), 1)
    Next i
    Cells(11, 2) = St 'зашифрованное слово выводим в ячейку В11
    St = ""
    
    'а теперь дещифровка
    S = Cells(11, 2) 'берем зашифрованную строку из ячейки B11
    For i = 1 To Len(S)  'Заменяем символы зашифрованной строки символами из алфавита
            St = St & Mid(GetNewAlfaBet(KeyWord), (InStr(1, AlfaBet, Mid(S, i, 1))), 1)
    Next i
    Cells(11, 3) = St 'дешифрованное слово выводим в ячейку С11
End Sub
 
'функция возвращает перемешанный алфавит
Private Function GetNewAlfaBet(key As Integer) As String
    Dim i As Integer, ArrAlfaBet() As String
    ReDim ArrAlfaBet(1 To Len(AlfaBet))
    For i = 1 To Len(AlfaBet)
        ArrAlfaBet(i) = Mid(AlfaBet, i, 1)
    Next i
    Unsort ArrAlfaBet, key
    GetNewAlfaBet = Join(ArrAlfaBet, "")
End Function
 
'Процедура перемешивания массива случайным образом
Private Sub Unsort(list() As String, key As Integer)
Dim i As Long
Dim pos As Long, min As Long
Dim tmp As String, max As Long
Rnd (-key)
min = LBound(list): max = UBound(list)
    For i = min To max - 1
        pos = Int((max - i + 1) * Rnd + i)
        tmp = list(pos)
        list(pos) = list(i)
        list(i) = tmp
    Next i
End Sub
Миниатюры
Зашифровать слово из ячейки Excel обобщенным шифром подстановки  
0
2 / 2 / 0
Регистрация: 05.06.2014
Сообщений: 18
10.10.2014, 20:52  [ТС]
Спасибо Вам огромное) Сейчас всё детально разберу, пойму! Мне бы вам передать хоть шоколадку)
0
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
10.10.2014, 21:18
Кстати, если строго следовать условиям задачи
имеется "новый" алфавит, представляющий собой некоторую строку - перестановку букв алфавита
перемешанный алфавит уже имеется, и генерировать его не обязательно. Поэтому код можно несколько сократить
Visual Basic
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
Option Explicit
                          
Sub Main()
    Dim AlphaBet As String, NewAlphaBet As String, S As String, St As String, i As Integer
    
    AlphaBet = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя1234567890"
    NewAlphaBet = "фом3б5ы6уп9ъ2ёащлйючяэеивьтз4н0ш8с1кгж7дрхц"
    
    Cells(4, 1) = AlphaBet     'в ячейку А4 выводим  алфавит
    Cells(5, 1) = NewAlphaBet 'в ячейку А5 выводим перемешанный алфавит
 
    'шифровка
    S = Cells(11, 1) 'берем строку из ячейки А11
    For i = 1 To Len(S)  'Заменяем символы строки символами нового алфавита
            St = St & Mid(NewAlphaBet, (InStr(1, AlphaBet, Mid(S, i, 1))), 1)
    Next i
    Cells(11, 2) = St 'зашифрованное слово выводим в ячейку В11
    St = ""
    
    'а теперь дещифровка
    S = Cells(11, 2) 'берем зашифрованную строку из ячейки B11
    For i = 1 To Len(S)  'Заменяем символы зашифрованной строки символами из алфавита
            St = St & Mid(AlphaBet, (InStr(1, NewAlphaBet, Mid(S, i, 1))), 1)
    Next i
    Cells(11, 3) = St 'дешифрованное слово выводим в ячейку С11
End Sub
Еще хочу заметить, что если в ячейке встретится символ, отсутствующий в алфавите, то скорее всего возникнет ошибка
0
 Аватар для Sasha_Smirnov
5562 / 1370 / 150
Регистрация: 08.02.2009
Сообщений: 4,109
Записей в блоге: 30
11.10.2014, 13:31
Другой вид шифрования путём перестановки букв: Как из слова образовать новое слово, в котором сначала идут все буквы, стоящие на четных местах, а потом на нечетных местах.

Там без замены алфавита, но для общего развития этой темы может пригодиться!

Но самое интересное — это как расшифровать зашифрованное (даже когда шифр открыт).
0
2 / 2 / 0
Регистрация: 05.06.2014
Сообщений: 18
11.10.2014, 13:34  [ТС]
Большое спасибо)
0
2 / 2 / 0
Регистрация: 05.06.2014
Сообщений: 18
11.10.2014, 13:35  [ТС]
Большое спасибо Вам! Разобралась, поняла) Теперь смело можно сдавать работу)
0
 Аватар для Sasha_Smirnov
5562 / 1370 / 150
Регистрация: 08.02.2009
Сообщений: 4,109
Записей в блоге: 30
11.10.2014, 20:40
А конкретно вам, куу30, подойдет вот такая функция от toiai.

Добавлено через 6 часов 9 минут
А вот очень забавная шифровка: Макрос для LibreOffice: заменять все буквы каждого пятого слова на вторые буквы следующего слова за ним!
1
2 / 2 / 0
Регистрация: 05.06.2014
Сообщений: 18
11.10.2014, 21:44  [ТС]
Спасибо)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.10.2014, 21:44
Помогаю со студенческими работами здесь

Как в Excel выделить ячейки с нужным слово и скопировать
Есть список словосочетаний. Допустим 1000. Как сделать чтобы можно было задать определенное слово и все словосочетания выделились с этим...

Записать слово из textbox побуквенно в разные ячейки Excel
Доброго времени суток. Пишу дипломный проект и передо мной встала нетривиальная задача. Положим, есть некий номер из 13 чисел. Он у нас...

Excel - как дописать слово во все ячейки одного столбца
Помогите Нужно дописать слово во все ячейки одного столбца как это сделать И еще есть прайс лист в формате exсel там кол-во товара...

Текстовые файлы: Зашифровать текст, заменив каждое его слово на слово - "перевертыш"
Дан файл, содержащий некоторый текст (например, предложение). Зашифровать текст, заменив каждое его слово на слово -...

Таблица подстановки в Excel
Здравствуйте! У меня не получается создать таблицу подстановки. Есть следующее задание: ЗАО &quot;Визит&quot; имеет...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru