Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 5.00/13: Рейтинг темы: голосов - 13, средняя оценка - 5.00
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
364 / 182 / 41
Регистрация: 13.07.2017
Сообщений: 4,854
Записей в блоге: 14

Преобразование строк

08.08.2019, 10:26. Показов 2924. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Такой вопрос. Написал два метода преобразования строк, которые по логике должны быть обратными. Но корректно преобразуются только короткие строки (например, из 3 символов). А на длинных каким-то магическим способом восстанавливается только начало каждой из s1, s2 и s3. Причем начало каждый раз разной длины, иногда случайно это может быть и полная длина строк, а иногда мизер. Думаю, проблема в том, что некорректно генерируется и/или извлекается ri. Прошу помочь.
C#
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
            public static string F(string cv, string s1, string s2, string s3, out string ri)
            {
                int i1 = 0, i2 = 0, i3 = 0;
                char c = cv[random.Next(0, cv.Length)], oc;
                List<char> ri_ = new List<char>(), result = new List<char>();
                bool b;
                while (i1 < s1.Length || i2 < s2.Length || i3 < s3.Length)
                {
                    b = false;
                    while (random.Next(2) == i1 % 2)
                    {
                        ri_.Add(c);
                        result.Add(c);
                        oc = c;
                        while (c == oc)
                        {
                            c = cv[random.Next(0, cv.Length)];
                        }
                        b = true;
                    }
                    result.Add((i1 < s1.Length) ? s1[i1] : ' ');
                    if (c == ((i1 < s1.Length) ? s1[i1] : ' ') || (b == true && ri_.Count != 0 && ri_[ri_.Count - 1] == ((i1 < s1.Length) ? s1[i1] : ' ')))
                    {
                        result.Add((i1 < s1.Length) ? s1[i1] : ' ');
                    }
                    i1++;
                    b = false;
                    while (random.Next(2) == i2 % 2)
                    {
                        ri_.Add(c);
                        result.Add(c);
                        oc = c;
                        while (c == oc)
                        {
                            c = cv[random.Next(0, cv.Length)];
                        }
                        b = true;
                    }
                    result.Add((i2 < s2.Length) ? s2[i2] : ' ');
                    if (c == ((i2 < s2.Length) ? s2[i2] : ' ') || (b == true && ri_.Count != 0 && ri_[ri_.Count - 1] == ((i2 < s2.Length) ? s2[i2] : ' ')))
                    {
                        result.Add((i2 < s2.Length) ? s2[i2] : ' ');
                    }
                    i2++;
                    b = false;
                    while (random.Next(2) == i3 % 2)
                    {
                        ri_.Add(c);
                        result.Add(c);
                        oc = c;
                        while (c == oc)
                        {
                            c = cv[random.Next(0, cv.Length)];
                        }
                        b = true;
                    }
                    result.Add((i3 < s3.Length) ? s3[i3] : ' ');
                    if (c == ((i3 < s3.Length) ? s3[i3] : ' ') || (b == true && ri_.Count != 0 && ri_[ri_.Count - 1] == ((i3 < s3.Length) ? s3[i3] : ' ')))
                    {
                        result.Add((i3 < s3.Length) ? s3[i3] : ' ');
                    }
                    i3++;
                    b = false;
                    while (random.Next(2) == i2 % 2)
                    {
                        ri_.Add(c);
                        result.Add(c);
                        oc = c;
                        while (c == oc)
                        {
                            c = cv[random.Next(0, cv.Length)];
                        }
                        b = true;
                    }
                    result.Add((i2 < s2.Length) ? s2[i2] : ' ');
                    if (c == ((i2 < s2.Length) ? s2[i2] : ' ') || (b == true && ri_.Count != 0 && ri_[ri_.Count - 1] == ((i2 < s2.Length) ? s2[i2] : ' ')))
                    {
                        result.Add((i2 < s2.Length) ? s2[i2] : ' ');
                    }
                    i2++;
                }
                ri_.Add(c);
                result.Add(c);
                ri = new string(ri_.ToArray());
                return new string(result.ToArray());
            }
 
            public static (string s1, string s2, string s3) G(string s, string ri)
            {
                int i1 = 0, i2 = 0;
                List<char> s1 = new List<char>(), s2 = new List<char>(), s3 = new List<char>();
                while (i1 < s.Length)
                {
                l0:
                    if (!(i1 < s.Length && s[i1] != '\0'))
                    {
                        break;
                    }
                    if (i2 < ribbon.Length && s[i1] == ri[i2])
                    {
                        if (i1 < s.Length - 1 && s[i1 + 1] == ri[i2])
                        {
                            s1.Add(s[i1]);
                            i1 += 2;
                        }
                        else
                        {
                            i1++;
                            i2++;
                            goto l0;
                        }
                    }
                    else
                    {
                        s1.Add(s[i1]);
                        i1++;
                    }
                l1:
                    if (!(i1 < s.Length && s[i1] != '\0'))
                    {
                        break;
                    }
                    if (i2 < ri.Length && s[i1] == ri[i2])
                    {
                        if (i1 < s.Length - 1 && s[i1 + 1] == ri[i2])
                        {
                            s2.Add(s[i1]);
                            i1 += 2;
                        }
                        else
                        {
                            i1++;
                            i2++;
                            goto l1;
                        }
                    }
                    else
                    {
                        s2.Add(s[i1]);
                        i1++;
                    }
                l2:
                    if (!(i1 < s.Length && s[i1] != '\0'))
                    {
                        break;
                    }
                    if (i2 < ri.Length && s[i1] == ri[i2])
                    {
                        if (i1 < s.Length - 1 && s[i1 + 1] == ri[i2])
                        {
                            s3.Add(s[i1]);
                            i1 += 2;
                        }
                        else
                        {
                            i1++;
                            i2++;
                            goto l2;
                        }
                    }
                    else
                    {
                        s3.Add(s[i1]);
                        i1++;
                    }
                l3:
                    if (!(i1 < s.Length && s[i1] != '\0'))
                    {
                        break;
                    }
                    if (i2 < ri.Length && s[i1] == ri[i2])
                    {
                        if (i1 < s.Length - 1 && s[i1 + 1] == ri[i2])
                        {
                            s2.Add(s[i1]);
                            i1 += 2;
                        }
                        else
                        {
                            i1++;
                            i2++;
                            goto l3;
                        }
                    }
                    else
                    {
                        s2.Add(s[i1]);
                        i1++;
                    }
                }
                return (new string((s1.ToArray()), new string(s2.ToArray()), new string(s3.ToArray()));
            }
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.08.2019, 10:26
Ответы с готовыми решениями:

Преобразование строк
Добрый день. Есть задача со строками. Строка допустим начинается с символа @ и есть строка которая начинается с цифры. Мне нужно если...

Преобразование строк в числа
Вечер добрый. Я к вам с элементарным вопросом, так как открыл Шилдта только сегодня. Почему вычисление не работает? using System; ...

Преобразование массива строк в строку
Есть массив строк, &quot;ля&quot;,&quot;ля&quot;,&quot;ля&quot;,&quot;ля&quot;. нужно склеить их в одну строку. string.Concat(str) клеит как &quot;ляляляля&quot;, а мне нужно...

25
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16445 / 11288 / 2892
Регистрация: 21.04.2018
Сообщений: 33,185
Записей в блоге: 2
10.08.2019, 19:56
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Ну хорошо, тогда пусть кто-либо, не зная ri, попробует вскрыть эту строку
Если имеется верификатор- то вскрыть каким-то переборщиком паролей врядли будет проблема.
Но, как вижу, более детально и досконально на это ответил КОП и вы согласились с его мнением.

Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Я точно не рассчитывал все варианты, но по моим ощущениям возможны коллизии.
Для того и делается удвоение, чтобы не было коллизий.
Мне кажется проще выбирать символ из cv отличный от предыдущего cv и от вставляемых из данных. Дублирование символов даёт дополнительную информацию для хака.

Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Ну я не виноват, что Элд Хасп попросил сделать комментарии.
Да не виноваты. Но Usaga вам пишет не за комменты, а за сам код.
Даже что бы с комментами начать понимать ваш код у меня ушло час-полтора.
Если бы код был сделан по нормальному с учётом правил SOLID и рекомендованных правил MS, то на это у меня ушло бы 5-10 минут. И даже не потребовалось бы копировать и запускать его в Студии.
0
10.08.2019, 20:01
 Комментарий модератора 
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
P. P. S. Может быть, в качестве благодарности за это признание восстановите хоть половину моего "ЧСВ", которое когда-то понизили?
Таких полномочий нет.
Поднять может каждый но только +1 за пост.
От себя как поощрение за признание +1 добавляю.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16445 / 11288 / 2892
Регистрация: 21.04.2018
Сообщений: 33,185
Записей в блоге: 2
10.08.2019, 20:02
Etyuhibosecyu, я пару дней не заходил на форум.
С учётом бесполезности подобного алгоритма для шифрования, вам ещё нужно решение и поиск ошибок?
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
364 / 182 / 41
Регистрация: 13.07.2017
Сообщений: 4,854
Записей в блоге: 14
10.08.2019, 20:04  [ТС]
Нет, не нужно. Тем более, что теперь проекта нет даже на свалке истории - я случайно кликнул не туда, и проект стерся с моего компьютера насовсем.
0
Эксперт .NET
 Аватар для Usaga
14821 / 9605 / 1369
Регистрация: 21.01.2016
Сообщений: 36,155
12.08.2019, 07:07
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
я случайно кликнул не туда, и проект стерся с моего компьютера насовсем.
И поделом. В следующий раз будете использовать систему контроля версий для своих ценных проектов.
0
131 / 146 / 19
Регистрация: 19.02.2017
Сообщений: 619
12.08.2019, 07:36
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
теперь проекта нет даже на свалке истории - я случайно кликнул не туда, и проект стерся с моего компьютера насовсем
Чтобы такого не происходило, придумали системы контроля версий, Git и т.п.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.08.2019, 07:36

Преобразование массива строк в массив чисел
Необходимо считать данные с текстового файла (много строк содержащих по 6 чисел через запятую) и в каждой из них отсортировать числа по...

Преобразование двух строк через Regex и проверка их на идентичность
Всем доброго времени суток. Мне нужно сравнить две очень длинные строки на их полную идентичность - поначалу в голову пришла мысль занести...

Быстрое преобразование Фурье и ошибка "Неявное преобразование типа"
А подскажите еще по одной прблемке: Есть программа реализующая БПФ (ну должна по крайней мере это делать) using System; using...

Преобразование массива строк вида 0.000000e+000
Помогите пожалуйста. Как преобразовать массив типа string в массив числового типа, если числа в нем записаны в виде: 0.000000e+000?

Преобразование матрицы путем перестановки строк и столбцов
Выполнить преобразование матрицы, а именно — перестановку строк и столбцов. Для квадратной матрицы размером n переставляйте столбцы и...


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

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Новые блоги и статьи
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru