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

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

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

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

Составить процедуру, которая позволяет зашифровать слово из клетки А11. Зашифрованное слово помещается в клетку В11. Принцип шифрования следующий: имеется "новый" алфавит, представляющий собой некоторую строку - перестановку букв алфавита. Если некоторая буква является k-той буквой в обычном алфавите, то вместо нее должна быть взята буква из k-той позиции "нового" алфавита.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.10.2014, 17:39
Ответы с готовыми решениями:

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

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

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

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

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

Добавлено через 1 минуту
Я, кстати, вообще никогда не работала с буквенным рандомом. Буду изучать..
0
es geht mir gut
11270 / 4752 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
10.10.2014, 19:42 11
Вот, набросал код для перемешивания алфавита.
В алфавит включил все символы кириллицы и латиницы в обоих регистрах, цифры и знаки препинания. Конечно, алфавит можно урезать, если знать наверняка, что в шифруемом сообщении будут, например, только кириллические символы в нижнем регистре.
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
11508 / 3794 / 681
Регистрация: 13.02.2009
Сообщений: 11,197
10.10.2014, 20:12 12
Другого и быть не может:
Организовать цикл по всем элементам строки с заменой каждой буквы буквой из нового алфафита.
0
es geht mir gut
11270 / 4752 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
10.10.2014, 20:26 13
Вариант
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  [ТС] 14
Спасибо Вам огромное) Сейчас всё детально разберу, пойму! Мне бы вам передать хоть шоколадку)
0
es geht mir gut
11270 / 4752 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
10.10.2014, 21:18 15
Кстати, если строго следовать условиям задачи
имеется "новый" алфавит, представляющий собой некоторую строку - перестановку букв алфавита
перемешанный алфавит уже имеется, и генерировать его не обязательно. Поэтому код можно несколько сократить
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
5562 / 1368 / 150
Регистрация: 08.02.2009
Сообщений: 4,109
Записей в блоге: 30
11.10.2014, 13:31 16
Другой вид шифрования путём перестановки букв: Как из слова образовать новое слово, в котором сначала идут все буквы, стоящие на четных местах, а потом на нечетных местах.

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

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

Добавлено через 6 часов 9 минут
А вот очень забавная шифровка: Макрос для LibreOffice: заменять все буквы каждого пятого слова на вторые буквы следующего слова за ним!
1
2 / 2 / 0
Регистрация: 05.06.2014
Сообщений: 18
11.10.2014, 21:44  [ТС] 20
Спасибо)
0
11.10.2014, 21:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.10.2014, 21:44
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru