Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/21: Рейтинг темы: голосов - 21, средняя оценка - 4.86
 Аватар для vioup
0 / 0 / 0
Регистрация: 07.04.2015
Сообщений: 55

Из массива байт в число

02.02.2019, 21:44. Показов 4271. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C#
1
2
3
4
5
6
7
8
static byte[] Number= {214,46,220,83,160,73,40,39,201,155,19,202,3,11,191,178,56,
                                   74,90,36,248,103,18,144,170,163,145,87,54,61,34,220,222,
                                   207,137,149,173,14,92,120,206,222,158,28,40,24,30,16,175,
                                   108,128,35,230,118,40,121,113,125,216,130,11,24,90,48,194,
                                   240,105,44,76,34,57,249,228,125,80,38,9,136,29,117,207,139,
                                   168,181,85,137,126,10,126,242,120,247,121,8,100,12,201,171,
                                   38,226,193,180,190,117,177,87,143,242,213,11,44,180,113,93,
                                   106,99,179,68,175,211,164,116,64,148,226,254,172,147};
Что из себя представляет по отдельности каждое число в десятичной степени, например Number[0]?

Как это представить в число BigInteger?
Есть такой код:
C#
1
var bigInteger = new BigInteger(Number.Concat(new byte[] { 0 }).ToArray());
но мне кажется, что он переводит неправильно.

Добавлено через 3 минуты
Чтобы более понимать, для чего именно это нужно, то поясню, что мне необходимо ввести число любой длины. Потом нужно перевести это число в такой вот массив байт. По сути это будет просто обратное действие.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.02.2019, 21:44
Ответы с готовыми решениями:

Запись в первый байт массива число
Допустим у нас есть такой массив char str; И нужно в первый байт записать сколько элементов в нем находится. Как это сделать? Хотя б с чего...

Как получить число из массива байт?
Во такой код на Java при помощи побитовых операций раскладывает double на байты double d = 65.43; byte toDouble = new byte; ...

Перевод из массива байт в целое число
Добрый день уважаемые форумчане есть вопросик, я даже не знаю как его правильно сформулировать, покажу наглядно. 1 байт - может быть...

9
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16130 / 11254 / 2888
Регистрация: 21.04.2018
Сообщений: 33,086
Записей в блоге: 2
02.02.2019, 23:46
Цитата Сообщение от vioup Посмотреть сообщение
мне необходимо ввести число любой длины
Прочитайте https://docs.microsoft.com/ru-... work-4.7.2
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
02.02.2019, 23:50
Цитата Сообщение от vioup Посмотреть сообщение
но мне кажется, что он переводит неправильно.
Нормально он переводит.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18288 / 14211 / 5368
Регистрация: 17.03.2014
Сообщений: 28,889
Записей в блоге: 1
03.02.2019, 00:05
Цитата Сообщение от vioup Посмотреть сообщение
Что из себя представляет по отдельности каждое число в десятичной степени, например Number[0]?
Отдельные байты числа от младшего к старшему.

Цитата Сообщение от vioup Посмотреть сообщение
мне кажется, что он переводит неправильно.
Почему? Простой тест показывает что преобразование происходит без ошибок
C#
1
2
3
4
5
6
7
8
9
long original = 0x701FAB0134C50042;
Console.WriteLine(original);
byte[] Number = BitConverter.GetBytes(original);
var bigInteger = new BigInteger(Number.Concat(new byte[] { 0 }).ToArray());
Console.WriteLine(bigInteger);
Number = bigInteger.ToByteArray();
long copy = BitConverter.ToInt64(Number, 0);
Console.WriteLine(copy);
Console.WriteLine("Все значения равны: {0}", (original == copy) && (original.ToString() == bigInteger.ToString()) ? "Да" : "Нет");
0
 Аватар для vioup
0 / 0 / 0
Регистрация: 07.04.2015
Сообщений: 55
03.02.2019, 00:25  [ТС]
OwenGlendower, спасибо тестирование. В данный момент я пытаюсь разобраться с тем, как работает RSA шифрование средствами языка (класс RSACryptoServiceProvider).
По задумке RSA использует 2 простых числа p и q. Они должны быть обязательно простыми. Вот допустим коротенький код, с помощью которого можно увидеть, какие именно числа автоматически генерируются классом:
C#
1
2
3
4
5
6
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
var info = rsa.ExportParameters(true);
// теперь info.P содержит число p в bytes[]
// info.Q содержит число q
var bigInteger = new BigInteger(info.P.Concat(new byte[] { 0 }).ToArray());   // тот самый метод
Console.WriteLine("Число p: " + bigInteger);
И вот он, хоть убей, генерирует какие угодно числа, хоть простые, хоть составные, полностью нарушая смысл метода RSA...или я что-то неправильно понимаю...
Можно особо не заморачиваться с проверкой числа, достаточно лишь взглянуть на то, что сгенерированное число на конце имеет четное число.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18288 / 14211 / 5368
Регистрация: 17.03.2014
Сообщений: 28,889
Записей в блоге: 1
03.02.2019, 00:57
Лучший ответ Сообщение было отмечено vioup как решение

Решение

vioup, похоже P хранится в big-endian порядке потому что переворот байтов дает число похожее на простое. В документации на RSAParameter я не нашел упоминаний о используемом порядке байтов. А вот конструктор BigInteger точно ожидает байты в little-endian порядке.
C#
1
var bigInteger = new BigInteger(info.P.Reverse().Concat(new byte[] { 0 }).ToArray());
Проверку на простое число делал с помощью кода со stackoverflow
Кликните здесь для просмотра всего текста
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
 public static class PrimeExtensions {
    // Random generator (thread safe)
    private static ThreadLocal<Random> s_Gen = new ThreadLocal<Random>(
      () => {
        return new Random();
      }
    );
 
    // Random generator (thread safe)
    private static Random Gen {
      get {
        return s_Gen.Value;
      }
    }
 
    public static Boolean IsProbablyPrime(this BigInteger value, int witnesses = 10) {
      if (value <= 1)
        return false;
 
      if (witnesses <= 0)
        witnesses = 10;
 
      BigInteger d = value - 1;
      int s = 0;
 
      while (d % 2 == 0) {
        d /= 2;
        s += 1;
      }
 
      Byte[] bytes = new Byte[value.ToByteArray().LongLength];
      BigInteger a;
 
      for (int i = 0; i < witnesses; i++) {
        do {
          Gen.NextBytes(bytes);
 
          a = new BigInteger(bytes);
        }
        while (a < 2 || a >= value - 2);
 
        BigInteger x = BigInteger.ModPow(a, d, value);
        if (x == 1 || x == value - 1)
          continue;
 
        for (int r = 1; r < s; r++) {
          x = BigInteger.ModPow(x, 2, value);
 
          if (x == 1)
            return false;
          if (x == value - 1)
            break;
        }
 
        if (x != value - 1)
          return false;
      }
 
      return true;
    }
  }
1
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,231
03.02.2019, 02:59
Насколько я понял, BigInteger - это знаковое целое (signed), а простые числа в RsaParameters - это беззнаковые (unsigned).
У BigInteger, оказывается, есть перегрузка, позволяющая принять байты в BigEndian:
C#
1
2
// BigInteger, судя по всему,  сам внутри может развернуть данные
var primep = new BigInteger(info.P, true, true); // isUnsigned = true, isBigEndian = true
C#
1
2
3
4
5
6
7
8
9
10
11
12
Enumerable.Range(1, 10).ToList().ForEach(n =>
            {
                var rsa = new RSACryptoServiceProvider();
                var info = rsa.ExportParameters(true);
                var primep = new BigInteger(info.P, true, true);
 
                var primep2 = new BigInteger(info.P.Reverse().Concat(new byte[1]).ToArray());
 
                Console.WriteLine($"Big integer: {primep}");
                Console.WriteLine($"Big integer: {primep2}");
                Console.WriteLine($"These two are equal: {primep.Equals(primep2)} {Environment.NewLine}");
            });
SO
2
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18288 / 14211 / 5368
Регистрация: 17.03.2014
Сообщений: 28,889
Записей в блоге: 1
03.02.2019, 03:59
Цитата Сообщение от IamRain Посмотреть сообщение
У BigInteger, оказывается, есть перегрузка, позволяющая принять байты в BigEndian:
Полезная перегрузка. Только вот доступна она только в .NET Core 2.1 и выше. Даже будущий .NET FW 4.8 не содержит её.
1
 Аватар для vioup
0 / 0 / 0
Регистрация: 07.04.2015
Сообщений: 55
03.02.2019, 12:55  [ТС]
Цитата Сообщение от IamRain Посмотреть сообщение
Console.WriteLine($"Big integer: {primep}");
Console.WriteLine($"Big integer: {primep2}");
Console.WriteLine($"These two are equal: {primep.Equals(primep2)} {Environment.NewLine}");
Было бы замечательно, если бы вы написали, что именно выведет консоль, т.к. у меня строка 5 выдает ошибку.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18288 / 14211 / 5368
Регистрация: 17.03.2014
Сообщений: 28,889
Записей в блоге: 1
03.02.2019, 15:57
vioup, в консоль будут выведены пары одинаковых чисел и сообщение что они равны.

5 строка выдает ошибку потому что данный конструктор поддерживается в .NET 2.1 и выше. В .NET Framework его нет.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.02.2019, 15:57
Помогаю со студенческими работами здесь

Дан массив из 6 байт. Посчитать количество байт число единиц, в которых не превышает 3.
Дан массив из 6 байт. Посчитать количество байт число единиц, в ко- торых не превышает 3. блин люди немогу сделать.

Циклический сдвиг вправо массива байт на заданное число двоичных разрядов
Добре время суток, помогите в решение задачи, заранее спасибо: Разработать процедуру BigRorCount (var M1; len, count: word), где M1 -...

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

Вычесть из одного массива байт другой массив байт
Здравствуйте! Подскажите что нужно сделать чтобы из одного массива байт вычесть другой массив байт!

Как из 4-х байт, составляющих число типа double, получить это число?
Как из 4-х байт, составляющих число типа double, получить это число? Пример: unsigned char tmp={63,128,0,0}; // значение double=1.0


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru