Ошибка синтаксического анализа в RSACryptoServiceProvider.ImportParameters с удалением нулевого байтового префикса? - PullRequest
4 голосов
/ 28 сентября 2010

У меня были некоторые проблемы, когда ключи RSA, созданные с использованием Security.Cryptography.RSAParameters, работали только большую часть времени с RSACryptoServiceProvider . ImportParameters .

ПослеПохоже, что для отладки свойств этого объекта требуются очень конкретные размеры байтового буфера.Мой код синтаксического анализа ASN.1 имеет исключение нулевого байтового префикса.Фактически, некоторые поля RSAParameters работают только после удаления нулевого байтового префикса, а другие вообще не работают, если было выполнено удаление нулевого байтового префикса.

Очень часто один из параметров имеет больше ведущих нулей из-за обычной рандомизации и приводит к тому, что полученный ключ не работает должным образом.

Это то, что считается ошибкой?

Ответы [ 2 ]

2 голосов
/ 26 июля 2011

.NET требует, чтобы размер каждого параметра RSA был точного размера (по отношению к размеру пары ключей).

Поэтому иногда вам необходимо удалить ведущий байт 0x00 (например, если данные поступают изASN.1, для которого требуется положительный 0 для положительных чисел).

Но в других случаях вам необходимо добавить дополнительный байт 0x00, поскольку байты представляют собой (огромное) число, которое может соответствовать меньшему количеству байтов (1 в действительности),Это происходит при разборе данных из файлов в кодировке PEM (base64), в которых обычно удаляется начальный 0.

Окончательный ответ: убедитесь, что вы указали ожидаемую длину (заполнение или удаление заполнения).

2 голосов
/ 29 сентября 2010

Почему вы возитесь с этими нулевыми байтами?Правильное кодирование DER положительного целого числа ASN.1 может включать один ведущий нулевой байт.Проще говоря, если старший байт целого числа равен 128 или больше, то перед кодированием должен предшествовать начальный нулевой байт.Без этого нулевого байта у вас есть DER-кодировка отрицательного целого числа.

...