Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.84/75: Рейтинг темы: голосов - 75, средняя оценка - 4.84
21 / 2 / 1
Регистрация: 31.03.2019
Сообщений: 33
.NET 4.x

Шифрование методом RSA

13.06.2020, 17:54. Показов 14904. Ответов 34
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть код для шифрования методом RSA, всё работает пока значения простых чисел не превышаю 3 знака, если указать простые числа длиной более 3-х знаков программа намертво зависает, можете подсказать в чём причина, как исправить ??
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
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Numerics;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace WindowsFormsApp3
{/// <summary>
/// RSA Шифрование 
/// </summary>
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
        }
        char[] characters = new char[] { '#', 'А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ё', 'Ж', 'З', 'И',
                                                'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С',
                                                'Т', 'У', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ь', 'Ы', 'Ъ',
                                                'Э', 'Ю', 'Я', ' ', '1', '2', '3', '4', '5', '6', '7',
                                                '8', '9', '0' };       
 
        private void button1_Click(object sender, EventArgs e)
        {//text1 = p text2 = q text3 = d text4 = n
            if ((textBox1.Text.Length > 0) && (textBox2.Text.Length > 0))
            {
                long p = Convert.ToInt64(textBox1.Text);
                long q = Convert.ToInt64(textBox2.Text);
 
                if (IsTheNumberSimple(p) && IsTheNumberSimple(q))
                {
 
                    string s = "";
 
                    StreamReader sr = new StreamReader("Начальные данные.txt");
 
                    while (!sr.EndOfStream)
                    {
                        s += sr.ReadLine();
                    }
 
                    sr.Close();
 
                    s = s.ToUpper();
 
                    long n = p * q;
                    long m = (p - 1) * (q - 1);
                    long d = Calculate_d(m);
                    long e_ = Calculate_e(d, m);
 
                    List<string> result = RSA_Endoce(s, e_, n);
 
                    StreamWriter sw = new StreamWriter("Зашифрованные данные.txt");
                    foreach (string item in result)
                        sw.WriteLine(item);
                    sw.Close();
 
                    textBox3.Text = d.ToString();
                    textBox4.Text = n.ToString();
 
                    Process.Start("Зашифрованные данные.txt");
                }
                else
                    MessageBox.Show("p или q - не простые числа!");
            }
            else
                MessageBox.Show("Введите p и q!");
        }
 
        private void textBox1_TextChanged(object sender, EventArgs e)
        {
 
        }
 
        private void textBox2_TextChanged(object sender, EventArgs e)
        {
 
        }
        private List<string> RSA_Endoce(string s, long e, long n)
        {
            List<string> result = new List<string>();
 
            BigInteger bi;
 
            for (int i = 0; i < s.Length; i++)
            {
                int index = Array.IndexOf(characters, s[i]);
 
                bi = new BigInteger(index);
                bi = BigInteger.Pow(bi, (int)e);
 
                BigInteger n_ = new BigInteger((int)n);
 
                bi = bi % n_;
 
                result.Add(bi.ToString());
            }
 
            return result;
        }
        private string RSA_Dedoce(List<string> input, long d, long n)
        {
            string result = "";
 
            BigInteger bi;
 
            foreach (string item in input)
            {
                bi = new BigInteger(Convert.ToDouble(item));
                bi = BigInteger.Pow(bi, (int)d);
 
                BigInteger n_ = new BigInteger((int)n);
 
                bi = bi % n_;
 
                int index = Convert.ToInt32(bi.ToString());
 
                result += characters[index].ToString();
            }
 
            return result;
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            if ((textBox3.Text.Length > 0) && (textBox4.Text.Length > 0))
            {
                long d = Convert.ToInt64(textBox3.Text);
                long n = Convert.ToInt64(textBox4.Text);
 
                List<string> input = new List<string>();
 
                StreamReader sr = new StreamReader("Зашифрованные данные.txt");
 
                while (!sr.EndOfStream)
                {
                    input.Add(sr.ReadLine());
                }
 
                sr.Close();
 
                string result = RSA_Dedoce(input, d, n);
 
                StreamWriter sw = new StreamWriter("Расшифровка.txt");
                sw.WriteLine(result);
                sw.Close();
 
                Process.Start("Расшифровка.txt");
            }
            else
                MessageBox.Show("Введите секретный ключ!");
        }
 
private bool IsTheNumberSimple(long n)
        {
            if (n < 2)
                return false;
 
            if (n == 2)
                return true;
 
            for (long i = 2; i < n; i++)
                if (n % i == 0)
                    return false;
 
            return true;
        }
       
        private long Calculate_d(long m)
        {
            long d = m - 1;
 
            for (long i = 2; i <= m; i++)
                if ((m % i == 0) && (d % i == 0)) //если имеют общие делители
                {
                    d--;
                    i = 1;
                }
 
            return d;
        }
        private long Calculate_e(long d, long m)
        {
            long e = 10;
 
            while (true)
            {
                if ((e * d) % m == 1)
                    break;
                else
                    e++;
            }
 
            return e;
        }
 
        private void button3_Click(object sender, EventArgs e)
        {
            try
            {
                //Создаём или перезаписываем существующий файл
                StreamWriter sw = File.CreateText("Начальные данные.txt");
                //Записываем текст в поток файла
                sw.WriteLine(textBox5.Text);
                //Закрываем файл
                sw.Close();
            }
            catch (Exception ex) //Хэндлим ошибки
            {
                MessageBox.Show("Error: " + ex.Message);
            }
        }
    }
}
зависание происходит в этом цикле:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 private List<string> RSA_Endoce(string s, long e, long n)
        {
            List<string> result = new List<string>();
 
            BigInteger bi;
 
            for (int i = 0; i < s.Length; i++)
            {
                int index = Array.IndexOf(characters, s[i]);
 
                bi = new BigInteger(index);
                bi = BigInteger.Pow(bi, (int)e);
 
                BigInteger n_ = new BigInteger((int)n);
 
                bi = bi % n_;
 
                result.Add(bi.ToString());
            }
 
            return result;
        }
Добавлено через 1 час 12 минут
Неужели никто в этом не разбирается!? да... закончились нормальные программисты на этом форуме.
1
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.06.2020, 17:54
Ответы с готовыми решениями:

Шифрование строки методом RSA
Здравствуйте, возникла такая задача. Есть текст. Нужно его зашифровать, используя метод асимметричного шифрования RSA. Так же...

Как поменять результат шифрование \ Метод шифрование RSA
Здравствуйте! Прошу помощи! В просторах интернета нашла одну статью в которой реализован метод шифрования RSA. Решила его опробовать, но...

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

34
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
364 / 182 / 41
Регистрация: 13.07.2017
Сообщений: 4,852
Записей в блоге: 14
14.06.2020, 12:32
Студворк — интернет-сервис помощи студентам
scidrov, там, где читаются из текстового поля p и q, вы тоже заменили на BigInteger.Parse? Какая у вас длина ключа, а какая длина шифруемого сообщения? Первое должно быть больше второго, в то же время длина ключа не должна быть и слишком большой, так как иначе расшифровка зависнет.
1
21 / 2 / 1
Регистрация: 31.03.2019
Сообщений: 33
14.06.2020, 12:50  [ТС]
Использовал эти значения, я так понял дело в ключе, почему-то не правильно генерируется
Изображения
 
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
364 / 182 / 41
Регистрация: 13.07.2017
Сообщений: 4,852
Записей в блоге: 14
14.06.2020, 12:55
scidrov, каким это способом у вас d равно 1? Напишите полностью p, q и e, не на скриншоте, а текстом, а я попробую узнать, в чем проблема с d.
1
21 / 2 / 1
Регистрация: 31.03.2019
Сообщений: 33
14.06.2020, 12:57  [ТС]
C#
1
2
 BigInteger e_ = 3;
BigInteger d = Calculate_d(e_, phi);
Верно же написал ?
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
364 / 182 / 41
Регистрация: 13.07.2017
Сообщений: 4,852
Записей в блоге: 14
14.06.2020, 12:58
А чему равны p и q?
1
21 / 2 / 1
Регистрация: 31.03.2019
Сообщений: 33
14.06.2020, 13:00  [ТС]
p = 1073676287 q = 68718952447
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
364 / 182 / 41
Регистрация: 13.07.2017
Сообщений: 4,852
Записей в блоге: 14
14.06.2020, 13:05
scidrov, уберите вот это:
C#
1
2
                BigInteger d = Convert.ToInt64(textBox3.Text);
                BigInteger n = Convert.ToInt64(textBox4.Text);
Добавлено через 2 минуты
scidrov, и сделайте e, d и n полями класса, а не локальными переменными одной функции.
1
21 / 2 / 1
Регистрация: 31.03.2019
Сообщений: 33
14.06.2020, 13:06  [ТС]
теперь d и n не существуют
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
364 / 182 / 41
Регистрация: 13.07.2017
Сообщений: 4,852
Записей в блоге: 14
14.06.2020, 13:13
scidrov, читайте выше.

Добавлено через 6 минут
scidrov, да, неудача вышла... phi кратно 3. Замените e на 65537, тогда точно вероятность, что phi разделится на это число, будет ничтожной.
1
21 / 2 / 1
Регистрация: 31.03.2019
Сообщений: 33
14.06.2020, 13:22  [ТС]
уже лучше, ключ формируется как нужно, дешифровка выглядит так:
Изображения
 
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
364 / 182 / 41
Регистрация: 13.07.2017
Сообщений: 4,852
Записей в блоге: 14
14.06.2020, 13:28
scidrov, нужно открыть файл в кодировке UTF-8. Блокнот - Файл - Открыть... - выпадающий список "Кодировка" - UTF-8.
1
21 / 2 / 1
Регистрация: 31.03.2019
Сообщений: 33
14.06.2020, 13:36  [ТС]
Открыл всё также:
Изображения
 
0
21 / 2 / 1
Регистрация: 31.03.2019
Сообщений: 33
14.06.2020, 13:39  [ТС]
код с последними исправлениями:
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
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Numerics;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace WindowsFormsApp3
{/// <summary>
/// RSA Шифрование 
/// </summary>
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        
        private void Form1_Load(object sender, EventArgs e)
        {
 
        }
        char[] characters = new char[] { '#', 'А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ё', 'Ж', 'З', 'И',
                                                'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С',
                                                'Т', 'У', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ь', 'Ы', 'Ъ',
                                                'Э', 'Ю', 'Я', ' ', '1', '2', '3', '4', '5', '6', '7',
                                                '8', '9', '0' };       
 
        private void button1_Click(object sender, EventArgs e)
        {//text1 = p text2 = q text3 = d text4 = n
            if ((textBox1.Text.Length > 0) && (textBox2.Text.Length > 0))
            {
                BigInteger p = BigInteger.Parse(textBox1.Text);
                BigInteger q = BigInteger.Parse(textBox2.Text);
 
                if (IsTheNumberprime(p) && IsTheNumberprime(q))
                {
 
                    string s = "";
 
                    StreamReader sr = new StreamReader("Начальные данные.txt");
 
                    while (!sr.EndOfStream)
                    {
                        s += sr.ReadLine();
                    }
 
                    sr.Close();
 
                    s = s.ToUpper();
                    
                    BigInteger n = p * q;
                    BigInteger phi = (p - 1) * (q - 1);
                    BigInteger e_ = 65537;
                    BigInteger d = Calculate_d(e_, phi);
 
                    File.WriteAllBytes("Зашифрованные данные.txt", RSA_Encode(s, e_, n));
                   // File.WriteAllBytes("Файл.txt", result);
                    //List<string> result = RSA_Encode(s, e_, n);
 
                    //StreamWriter sw = new StreamWriter("Зашифрованные данные.txt");
                   // foreach (string item in result)
                       // sw.WriteLine(item);
                   // sw.Close();
 
                    textBox3.Text = d.ToString();
                    textBox4.Text = n.ToString();
 
                    Process.Start("Зашифрованные данные.txt");
                }
                else
                    MessageBox.Show("p или q - не простые числа!");
            }
            else
                MessageBox.Show("Введите p и q!");
        }
 
        private void textBox1_TextChanged(object sender, EventArgs e)
        {
 
        }
 
        private void textBox2_TextChanged(object sender, EventArgs e)
        {
 
        }
        private byte[] RSA_Encode(string s, BigInteger e, BigInteger n) //Результат шифрования обычно представляется в виде массива байт
        {
            BigInteger m = new BigInteger(Encoding.UTF8.GetBytes(s));
            BigInteger result = BigInteger.ModPow(m, e, n);
            return result.ToByteArray();
        }
        private string RSA_Decode(byte[] input, BigInteger d, BigInteger n)
        {
            BigInteger c = new BigInteger(input);
            BigInteger result = BigInteger.ModPow(c, d, n);
            return Encoding.UTF8.GetString(result.ToByteArray().Reverse().SkipWhile(x => x == 0).Reverse().ToArray());
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            if ((textBox3.Text.Length > 0) && (textBox4.Text.Length > 0))
            {
                BigInteger d = BigInteger.Parse(textBox3.Text);
                BigInteger n = BigInteger.Parse(textBox4.Text);
 
                //List<string> input = new List<string>();
                byte[] input = File.ReadAllBytes("Зашифрованные данные.txt");
                //StreamReader sr = new StreamReader("Зашифрованные данные.txt");
 
                // while (!sr.EndOfStream)
                // {
                // input.Add(sr.ReadLine());
                //  }
 
                //  sr.Close();
                File.WriteAllText("Расшифровка.txt", RSA_Decode(input, d, n));
               // string result = RSA_Decode(input, d, n);
 
               // StreamWriter sw = new StreamWriter("Расшифровка.txt");
                //sw.WriteLine(result);
               // sw.Close();
 
                Process.Start("Расшифровка.txt");
            }
            else
                MessageBox.Show("Введите секретный ключ!");
        }
 
private bool IsTheNumberprime(BigInteger n )
        {
            BigInteger k = 100000;
            // if (n < 2)
            //   return false;
 
            // if (n == 2)
            //  return true;
 
            //  for (BigInteger i = 2; i < n; i++)
            //   if (n % i == 0)
            //      return false;
 
            // return true;
 
            // если n == 2 или n == 3 - эти числа простые, возвращаем true
            if (n == 2 || n == 3)
                return true;
 
            // если n < 2 или n четное - возвращаем false
            if (n < 2 || n % 2 == 0)
                return false;
 
            // представим n − 1 в виде (2^s)·t, где t нечётно, это можно сделать последовательным делением n - 1 на 2
            BigInteger t = n - 1;
 
            int s = 0;
 
            while (t % 2 == 0)
            {
                t /= 2;
                s += 1;
            }
 
            // повторить k раз
            for (int i = 0; i < k; i++)
            {
                // выберем случайное целое число a в отрезке [2, n − 2]
                RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
 
                byte[] _a = new byte[n.ToByteArray().LongLength];
 
                BigInteger a;
 
                do
                {
                    rng.GetBytes(_a);
                    a = new BigInteger(_a);
                }
                while (a < 2 || a >= n - 2);
 
                // x ← a^t mod n, вычислим с помощью возведения в степень по модулю
                BigInteger x = BigInteger.ModPow(a, t, n);
 
                // если x == 1 или x == n − 1, то перейти на следующую итерацию цикла
                if (x == 1 || x == n - 1)
                    continue;
 
                // повторить s − 1 раз
                for (int r = 1; r < s; r++)
                {
                    // x ← x^2 mod n
                    x = BigInteger.ModPow(x, 2, n);
 
                    // если x == 1, то вернуть "составное"
                    if (x == 1)
                        return false;
 
                    // если x == n − 1, то перейти на следующую итерацию внешнего цикла
                    if (x == n - 1)
                        break;
                }
 
                if (x != n - 1)
                    return false;
            }
 
            // вернуть "вероятно простое"
            return true;
        
 
    }
       
        
        private BigInteger Calculate_d(BigInteger e, BigInteger phi)
        {
 
            BigInteger a = e;
            BigInteger b = phi, x = 0, d_ = 1;
            while (a > 0)
            {
                BigInteger q_ = b / a;
                BigInteger y = a;
                a = b % a;
                b = y;
                y = d_;
                d_ = x - q_ * d_;
                x = y;
            }
            x = (x + phi) % phi;
            return x;
        }
       
 
        private void button3_Click(object sender, EventArgs e)
        {
            try
            {
                //Создаём или перезаписываем существующий файл
                StreamWriter sw = File.CreateText("Начальные данные.txt");
                //Записываем текст в поток файла
                sw.WriteLine(textBox5.Text);
                //Закрываем файл
                sw.Close();
            }
            catch (Exception ex) //Хэндлим ошибки
            {
                MessageBox.Show("Error: " + ex.Message);
            }
        }
    }
}
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
364 / 182 / 41
Регистрация: 13.07.2017
Сообщений: 4,852
Записей в блоге: 14
14.06.2020, 13:39
Лучший ответ Сообщение было отмечено scidrov как решение

Решение

scidrov, БИТОВАЯ длина ключа должна быть БОЛЬШЕ битовой длины сообщения. В привычных единицах это означает, что количество цифр в ключе должно быть в 6-10 раз больше количества символов в сообщении.
1
21 / 2 / 1
Регистрация: 31.03.2019
Сообщений: 33
14.06.2020, 13:44  [ТС]
Спасибо, понял теперь всё работает)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.06.2020, 13:44

RSA шифрование
Всем привет, вопрос такой. Будет 2 приложения. 1 шифрует 2 расшифровывает. Я создал пару ключей, экспортировал как xml. Как мне...

RSA шифрование
Доброго времени суток, у меня возникла такая проблема, преподаватель дал задание: &quot;написать свою реализацию алгоритма RSA...

Шифрование файлов RSA
Дали задание зашифровать файлы при помоши RSA. Я нашел материалы как его используют со строками. Все с файлами работает аналогично. Но если...

Шифрование по алгоритму RSA
Криптосистема шифрования данных RSA Не получается дешифрование. Что не так? Пара чисел (e,n) публикуется в качестве открытого...

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


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

Или воспользуйтесь поиском по форуму:
35
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru