Есть ли способ генерировать большие простые числа в C #, без использования внешней библиотеки? - PullRequest
3 голосов
/ 10 декабря 2011

Мне нужно генерировать большие простые числа для криптографического проекта. Я заметил, что .NET 4.0 имеет некоторые встроенные криптографические примитивы (например, RSA), которые используют случайные сгенерированные большие простые числа (p, q для RSA). Все ли они используют общую встроенную библиотеку, которая является общедоступной и к которой можно получить доступ из-за пределов своих классов, или мне нужно использовать внешнюю библиотеку (я знаю, что существуют простые алгоритмы для тестов простоты, я просто не хочу реализовать больше, чем я должен.).

Ответы [ 2 ]

1 голос
/ 10 декабря 2011

В .NET v4 (и более поздних версиях) Microsoft предоставляет новую сборку System.Numerics.dll, которая включает тип BigInteger. Однако он не предоставляет никакого метода для проверки простых чисел.

Mono (начиная с версии 1.0) также предоставляет тип [BigInteger][3], расположенный в его сборке Mono.Security.dll. Вы можете использовать как есть или перенести методы простой проверки (существует несколько методов) на новый тип Microsoft BigInteger.

Все ли они используют общую встроенную библиотеку, которая является общедоступной и к ней можно получить доступ из-за пределов своих классов

Да, и RSACryptoServiceProvider, и DSACryptoServiceProvider обращаются в CryptoAPI, чтобы сделать это. Однако CAPI не предоставляет свой собственный код BigInteger (даже для собственного кода), поэтому он вам не поможет.

1 голос
/ 10 декабря 2011

Генерация большого числа в требуемом диапазоне.Проверьте это, чтобы видеть, является ли это главным.Отклоните и повторите, если это не так.

Для тестирования просто используйте пробное деление с простыми числами, скажем, до 1500, а затем переключитесь на Миллера-Рабина.С должным образом реализованным Миллером-Рабином шансы аппаратного сбоя больше, чем ошибочно помечать композит как простое.

...