Форум программистов, компьютерный форум, киберфорум
Наши страницы
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.88/16: Рейтинг темы: голосов - 16, средняя оценка - 4.88
XudaH
13 / 13 / 0
Регистрация: 04.05.2009
Сообщений: 130
#1

Закодировать текст

27.01.2011, 20:14. Просмотров 2921. Ответов 14
Метки нет (Все метки)

Привет всем =) Вот с программкой кое какой парюсь, нужно закодировать слово шифром Цезаря.
То есть:
1) есть русский алфавит из 33 букв и одного пробела.
2) например, закодировать слово "яблоко" (в кодированном виде получиться "вдоснс"), т.е. чтобы закодировать слово нужно по алфавиту сместиться на 3 буквы вправо (например, была буква А, стала буквой Г)
Порядок смещения можно задать любой(это по умолчанию на 3 буквы вправо смещается).
Ещё нужно закодированное слово и раскодировать ;-)
Так вот как такое сделать?
Спасибо за внимание!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.01.2011, 20:14
Ответы с готовыми решениями:

Закодировать текст по Вижинеру
Начало тут А можно пояснение, где что

Закодировать текст по Вижинеру
Привет всем =) Опять я с кодировкой. На этот раз не получается закодировать...

Закодировать текст методом гаммирования
Привет всем) Как закодировать текст методом гаммирования? Метод гаммирования:...

Как, используя метод base64, закодировать текст?
Здравствуйте. Подскажите пожалуйста, как изменить код, чтобы можно было ...

Закодировать файлы и поставить пароль для их расшифровки
Как закодировать все файлы в определенной папке?И что бы их запустить нужно...

14
Provaider
104 / 32 / 1
Регистрация: 01.10.2010
Сообщений: 310
27.01.2011, 22:06 #2
Ну здесь есть несколько путей. 1) это получить кодировку символов, и уже танцевать от неё. 2) Написать функцию, которая вначале обрезает полученную строку посимвольно, а потом ты сам кодируешь полученные буквы таким образом:1=А, 2=Б, 3=В, прбел=00, маленькие буквы так: а=11, б=21 и т.д., а чтобы потом не запутаться с раскодировкой, буквы переведённые в цифру разделяй знаком ";". Как-то так
0
XudaH
13 / 13 / 0
Регистрация: 04.05.2009
Сообщений: 130
28.01.2011, 17:12  [ТС] #3
Вот массив из букв как создать?
0
Eugene22
_
2350 / 1223 / 78
Регистрация: 28.10.2009
Сообщений: 4,331
28.01.2011, 18:21 #4
Вот массив из букв как создать?
vb.net
1
твоя_строка.ToCharArray()
0
Памирыч
Почетный модератор
20867 / 8751 / 1080
Регистрация: 11.04.2010
Сообщений: 11,013
28.01.2011, 18:29 #5
Как вариант. На форме 2 текстбокса и 75 кнопок. Класс формы:
vb.net
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
Public Class Form1
    Dim MC As String = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ .,!№;%:?*()0123456789\/" & """"
    Dim Inps As String
    Dim Outps As String
    Dim KoefF As Integer = 1
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Inps = TextBox1.Text
        Outps = ""
        For I As Integer = 1 To Inps.Length
            Dim Fnd As Integer = InStr(MC, Strings.Mid(Inps, I, 1), CompareMethod.Text)
            If Fnd <> 0 Then
                Dim Tmp As Integer = Fnd + KoefF
                If Tmp > MC.Length Then Tmp = Tmp - MC.Length
                Outps &= Strings.Mid(MC, Tmp, 1)
            End If
        Next
        TextBox2.Text = (Outps)
    End Sub
 
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Inps = TextBox1.Text
        Outps = ""
        For I As Integer = 1 To Inps.Length
            Dim Fnd As Integer = InStr(MC, Strings.Mid(Inps, I, 1), CompareMethod.Text)
            If Fnd <> 0 Then
                Dim Tmp As Integer = Fnd - KoefF
                If Tmp <= 0 Then Tmp = MC.Length - Tmp
                Outps &= Strings.Mid(MC, Tmp, 1)
            End If
        Next
        TextBox2.Text = (Outps)
    End Sub
End Class
Прижелании можно убрать точки и запятые в строке. При желании можно доработать код, и будут меняться только буквы, а точки и запятые будут на своих местах.
2
XudaH
13 / 13 / 0
Регистрация: 04.05.2009
Сообщений: 130
28.01.2011, 22:02  [ТС] #6
vb.net
1
Как вариант. На форме 2 текстбокса и 75 кнопок.
о_О столько много кнопок именно нужно?))
0
Памирыч
Почетный модератор
20867 / 8751 / 1080
Регистрация: 11.04.2010
Сообщений: 11,013
28.01.2011, 22:27 #7
Конечно это шутка. Но если их все разместить, код все равно будет работать

Добавлено через 2 минуты
vb.net
1
Dim KoefF As Integer = 1
Это и есть сдвиг, установи другой
1
Eugene22
_
2350 / 1223 / 78
Регистрация: 28.10.2009
Сообщений: 4,331
28.01.2011, 23:14 #8
Предлагаю альтернативный способ кодирования
vb.net
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 Imports System.Text
Private Sub button_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles Button1.Click
        Dim s As String = TextBox2.Text
        Dim i As StringBuilder = New StringBuilder()
        Dim d As Integer
        For Each c As Char In s
            d = AscW(c)
            Select Case d
                Case 1103 : d = 1039
                Case 1102 : d = 1038
                Case 1101 : d = 1037
            End Select
            d = d + 3
            i.Append(ChrW(d))
        Next
    End Sub
Раскодирование (правда не проверял)
vb.net
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Private Sub button_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles Button2.Click
        Dim s As String = TextBox2.Text
        Dim i As StringBuilder = New StringBuilder()
        Dim d As Integer
        For Each c As Char In s
            d = AscW(c) - 3
            Select Case d
                Case 1039 : d = 1103
                Case 1038 : d = 1102
                Case 1037 : d = 1101
            End Select        
            i.Append(ChrW(d))
        Next
    End Sub
1
Памирыч
Почетный модератор
20867 / 8751 / 1080
Регистрация: 11.04.2010
Сообщений: 11,013
28.01.2011, 23:22 #9
Eugene22, у тебя жестко обозначено смещение на 3 символа. Если переделывать под например 17 - то тут придется покропеть в блоке СелектКейз.
Нет?

Добавлено через 3 минуты
Цитата Сообщение от XudaH Посмотреть сообщение
Порядок смещения можно задать любой(это по умолчанию на 3 буквы вправо смещается)
Думается, неплохо бы предлагать пользователю интервал смещения - вообще бы хорошо было.
А еще обработать ввод значения смещения, превышающее длину строки с буквами...
0
Eugene22
_
2350 / 1223 / 78
Регистрация: 28.10.2009
Сообщений: 4,331
28.01.2011, 23:31 #10
А ну это ты правильно заметил, значит есть куда расти. Просто в поставленной задаче что-то говорилось про сдиг на три символа, поэтому я от этого и отталкивался. От балды решил побыстрому набрасать.
0
Памирыч
Почетный модератор
20867 / 8751 / 1080
Регистрация: 11.04.2010
Сообщений: 11,013
28.01.2011, 23:36 #11
Цитата Сообщение от Eugene22 Посмотреть сообщение
Case 1103 : d = 1039 Case 1102 : d = 1038 Case 1101 : d = 1037
А не проще ли делать проверку, мол, если Д больше чем 1100, то пусть оно равно Д - 64?
Ведь там сплошная математика. Пусть автор учтет, если будет код тоже обкатывать.
StringBuilder - безусловно, грамотный ход, я как-то забыл про него.
0
Eugene22
_
2350 / 1223 / 78
Регистрация: 28.10.2009
Сообщений: 4,331
28.01.2011, 23:46 #12
Ага мне тоже какие-то мысли начали приходить вначале, чтобы универсально это расчитать. Просто день выдался тяжелым, я уже не особо соображаю.
0
XudaH
13 / 13 / 0
Регистрация: 04.05.2009
Сообщений: 130
01.02.2011, 21:06  [ТС] #13
Все работает) Только если сдвиг, например, на 2 поставлю, чтобы раскодировать букву "А", должна получиться буква "Я", в поле ничего не пишется((
0
Памирыч
Почетный модератор
20867 / 8751 / 1080
Регистрация: 11.04.2010
Сообщений: 11,013
02.02.2011, 06:54 #14
Мой косяк - мы вычитаем отрицательное число, то есть, получаем сложение.
В блоке кода с расшифровкой в строке
vb.net
1
If Tmp <= 0 Then Tmp = MC.Length - Tmp
Надо заменить "-" на "+":
vb.net
1
If Tmp <= 0 Then Tmp = MC.Length + Tmp
1
XudaH
13 / 13 / 0
Регистрация: 04.05.2009
Сообщений: 130
02.02.2011, 18:25  [ТС] #15
Цитата Сообщение от Памирыч Посмотреть сообщение
Мой косяк - мы вычитаем отрицательное число, то есть, получаем сложение.
В блоке кода с расшифровкой в строке
vb.net
1
If Tmp <= 0 Then Tmp = MC.Length - Tmp
Надо заменить "-" на "+":
vb.net
1
If Tmp <= 0 Then Tmp = MC.Length + Tmp
спасибо) я уже в колледже разобрался когда сдавал))
0
02.02.2011, 18:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.02.2011, 18:25

Задан некоторый текст и матрица-ключ, в которой каждой букве поставлено число. Зашифруйте текст
Задано некоторый текст и матрица-ключ, в которой каждой букве украинского...

Закодировать введенный текст
Здравствуйте. Нужно закодировать текст набранный символами русского алфавита....

Как закодировать текст в MD5 ?
Здравствуйте! Задачка простая. Есть текст, например &quot;12345абвгд&quot; который...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru