С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 15.06.2018
Сообщений: 4
1

Перевод кода из C в C#

15.06.2018, 11:29. Показов 2163. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Можете пожалуйста помочь перевести данный код на языке С в C#?
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
extern unsigned long long getcyclecount();
 
/* This code is based on the
 *  Reference implementation of the TRIVIUM stream cipher
 *  Christophe De Canniere, K.U.Leuven.
 */
 
typedef unsigned int  u32;
typedef unsigned char u8;
 
typedef struct {
  u32 keylen;
  u32 ivlen;
  u8  s[40];
  u8  key[10];
 
} ECRYPT_ctx;
 
#define U32TO8_LITTLE(p, v) (((u32*)(p))[0] = U32TO32_LITTLE(v))
#define U8TO32_LITTLE(p) U32TO32_LITTLE(((u32*)(p))[0])
#define U32TO32_LITTLE(v) (v)
 
#define S00(a, b) ((S(a, 1) << ( 32 - (b))))
#define S32(a, b) ((S(a, 2) << ( 64 - (b))) | (S(a, 1) >> ((b) - 32)))
#define S64(a, b) ((S(a, 3) << ( 96 - (b))) | (S(a, 2) >> ((b) - 64)))
#define S96(a, b) ((S(a, 4) << (128 - (b))) | (S(a, 3) >> ((b) - 96)))
 
#define UPDATE()                                                             \
  do {                                                                       \
    T(1) = S64(1,  66) ^ S64(1,  93);                                        \
    T(2) = S64(2,  69) ^ S64(2,  84);                                        \
    T(3) = S64(3,  66) ^ S96(3, 111);                                        \
                                                                             \
    Z(T(1) ^ T(2) ^ T(3));                                                   \
                                                                             \
    T(1) ^= (S64(1,  91) & S64(1,  92)) ^ S64(2,  78);                       \
    T(2) ^= (S64(2,  82) & S64(2,  83)) ^ S64(3,  87);                       \
    T(3) ^= (S96(3, 109) & S96(3, 110)) ^ S64(1,  69);                       \
  } while (0)
 
#define ROTATE()                                                             \
  do {                                                                       \
    S(1, 3) = S(1, 2); S(1, 2) = S(1, 1); S(1, 1) = T(3);                    \
    S(2, 3) = S(2, 2); S(2, 2) = S(2, 1); S(2, 1) = T(1);                    \
    S(3, 4) = S(3, 3); S(3, 3) = S(3, 2); S(3, 2) = S(3, 1); S(3, 1) = T(2); \
  } while (0)
 
#define LOAD(s)                                                              \
  do {                                                                       \
    S(1, 1) = U8TO32_LITTLE((s) +  0);                                       \
    S(1, 2) = U8TO32_LITTLE((s) +  4);                                       \
    S(1, 3) = U8TO32_LITTLE((s) +  8);                                       \
                                                                             \
    S(2, 1) = U8TO32_LITTLE((s) + 12);                                       \
    S(2, 2) = U8TO32_LITTLE((s) + 16);                                       \
    S(2, 3) = U8TO32_LITTLE((s) + 20);                                       \
                                                                             \
    S(3, 1) = U8TO32_LITTLE((s) + 24);                                       \
    S(3, 2) = U8TO32_LITTLE((s) + 28);                                       \
    S(3, 3) = U8TO32_LITTLE((s) + 32);                                       \
    S(3, 4) = U8TO32_LITTLE((s) + 36);                                       \
  } while (0)
 
#define STORE(s)                                                            \
  do {                                                                      \
    U32TO8_LITTLE((s) +  0, S(1, 1));                                       \
    U32TO8_LITTLE((s) +  4, S(1, 2));                                       \
    U32TO8_LITTLE((s) +  8, S(1, 3));                                       \
                                                                            \
    U32TO8_LITTLE((s) + 12, S(2, 1));                                       \
    U32TO8_LITTLE((s) + 16, S(2, 2));                                       \
    U32TO8_LITTLE((s) + 20, S(2, 3));                                       \
                                                                            \
    U32TO8_LITTLE((s) + 24, S(3, 1));                                       \
    U32TO8_LITTLE((s) + 28, S(3, 2));                                       \
    U32TO8_LITTLE((s) + 32, S(3, 3));                                       \
    U32TO8_LITTLE((s) + 36, S(3, 4));                                       \
  } while (0)
 
void ECRYPT_keysetup(
  ECRYPT_ctx* ctx, 
  const u8* key, 
  u32 keysize,
  u32 ivsize)
{
  u32 i;
 
  ctx->keylen = (keysize + 7) / 8;
  ctx->ivlen = (ivsize + 7) / 8;
 
  for (i = 0; i < ctx->keylen; ++i)
    ctx->key[i] = key[i];
}
 
#define S(a, n) (s##a##n)
#define T(a) (t##a)
 
void ECRYPT_ivsetup(
  ECRYPT_ctx* ctx, 
  const u8* iv)
{
  u32 i;
 
  u32 s11, s12, s13;
  u32 s21, s22, s23;
  u32 s31, s32, s33, s34;
 
  for (i = 0; i < ctx->keylen; ++i)
    ctx->s[i] = ctx->key[i];
 
  for (i = ctx->keylen; i < 12; ++i)
    ctx->s[i] = 0;
 
  for (i = 0; i < ctx->ivlen; ++i)
    ctx->s[i + 12] = iv[i];
 
  for (i = ctx->ivlen; i < 12; ++i)
    ctx->s[i + 12] = 0;
 
  for (i = 0; i < 13; ++i)
    ctx->s[i + 24] = 0;
 
  ctx->s[13 + 24] = 0x70;
 
  LOAD(ctx->s);
 
#define Z(w)
 
  for (i = 0; i < 4 * 9; ++i)
    {
      u32 t1, t2, t3;
      
      UPDATE();
      ROTATE();
    }
 
  STORE(ctx->s);
}
 
void ECRYPT_process_bytes(
  int action,
  ECRYPT_ctx* ctx, 
  const u8* input, 
  u8* output, 
  u32 msglen)
{
  u32 i;
 
  u32 s11, s12, s13;
  u32 s21, s22, s23;
  u32 s31, s32, s33, s34;
 
  u32 z;
 
  LOAD(ctx->s);
 
#undef Z
#define Z(w) (U32TO8_LITTLE(output + 4 * i, U8TO32_LITTLE(input + 4 * i) ^ w))
 
  for (i = 0; i < msglen / 4; ++i)
    {
      u32 t1, t2, t3;
      
      UPDATE();
      ROTATE();
    }
 
#undef Z
#define Z(w) (z = w)
 
  STORE(ctx->s);
}
 
/* ------------------------------------------------------------------------- */
 
int main() {
  ECRYPT_ctx trivium_state;
 
  u8 key[10] = {0x80, 0, 0, 0, 0, 0, 0, 0};
  u8 iv[10]  = {   0, 0, 0, 0, 0, 0, 0, 0};
 
  u8 input[2048];
  u8 output[2048];
 
  unsigned i;
 
  unsigned long long c0, c1, c2;
 
  memset(input, 0, 512);
 
  c0 = getcyclecount();
 
  ECRYPT_keysetup(&trivium_state, key, 10, 10);
  ECRYPT_ivsetup (&trivium_state, iv);
 
  c1 = getcyclecount();
 
  ECRYPT_process_bytes(0, &trivium_state, input, output, 2048);
 
  c2 = getcyclecount();
 
  for (i=0; i<16; i++)
    printf("%x\n", output[i]);
 
  printf("key schedule cycles: %lld  stream cycles: %lld\n", c1 - c0, c2 - c1);
 
  return 0;
 
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Блог
15.06.2018, 11:29
Ответы с готовыми решениями:

Перевод кода из с C++
Здравствуйте, нужна помощь в переводе кода. Отпишитесь, кто может помочь.

Перевод кода из 'VB' в 'C#'
Здраствуыте уважаемые.Есть у меня такой вопросик.Может кто то встречал или уже пользуетса,или гдето...

Перевод кода с C++ на C#
Всем доброго времени суток Вот пытаюсь переписать библиотеку написанную на С++ на C# Вроде все...

Перевод кода из VB.NET
Нашел программу и конвентор перевел код и вот как было &lt;DllImport(&quot;Kernel32.dll&quot;)&gt; Private...

3
Нарушил, 10 блоков,акка
72 / 72 / 11
Регистрация: 19.07.2013
Сообщений: 250
15.06.2018, 23:12 2
Конечно, а ты студент? С целью украсть другую работу интерисуешься?Али так в научных целях ?
0
0 / 0 / 0
Регистрация: 15.06.2018
Сообщений: 4
16.06.2018, 06:08  [ТС] 3
Да студент. Скорее в плане понимания. Я не особо силен в языках вообще. Мне нужно понять даный код, но раньше я учил только с# и вспомнить будет проще чем разбираться с С. Сроки просто поджимают.
0
1150 / 858 / 263
Регистрация: 30.04.2009
Сообщений: 3,598
17.06.2018, 19:45 4
На халяву никто тебе здесь этого не сделает.
Если реально нужно и "сроки поджимают" то тебе сюда https://www.cyberforum.ru/order-program/
0
17.06.2018, 19:45
BasicMan
Эксперт
19315 / 2622 / 84
Регистрация: 17.02.2009
Сообщений: 10,364
Блог
17.06.2018, 19:45
Помогаю со студенческими работами здесь

Перевод кода из Delphi в C#
Доброго времени суток! Люди, подскажите пожалуйста как по-хорошему перевести на C# код: Как это...

Перевод кода из Python в C#
Помогите,пожалуйста, перевести код. Просто язык Python я вообще не знаю. Эта программа- это взлом...

Перевод кода Basic на C#
Добрый день. Переписываю программу с basica на С#. Помогите пожалуйста со следующим кодом,...

перевод Делфи кода.
Есть Делфи код: TData8 = array of byte; PData8 = ^TData8; В принципе ни чего сложного в его...


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

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