Как работает RSA в C#?
День добрый, тов. программисты. Пытаюсь сделать приложение для RSA шифрования, но не могу понять одной вещи.
В RSACryptoServiceProvider явно задаю длину ключа, где byteLenRSAKeys = 2048
rsa = new RSACryptoServiceProvider(byteLenRSAKeys);
// Экспортирую ключи
privateKey = rsa.ExportParameters(true);
В дальнейшем выясняется, что фактическая длина ключа другая:
256 * 2 + 128 * 5 = 1152
Создаю 2048, а по факту 1152. Кто может объяснить? Я что-то делаю не так или дело в самом RSACryptoServiceProvider?
Ответы (1 шт):
Не все приведенные составляющие являются часть ключа. Насколько я помню. Размер влияет только на Modulus, т.е. вы указали 2048 бит, то у вас он и будет равен 256 * 8 = 2048.
Exponentэто некое простое число, часто его берут как 65537.PиQдва простых числа, на основании которых будут высчитываться другие числа, в том числе иModules, размер этих чисел обычно берется как половина ключа.D,DP,DQ- разные экспоненты.InverseQ- коэфициент.
Публичный ключ состоит Modules и Exponent.
Приватный - из всего что перечислено выше, но напрямую это не зависит от ключа, эти все поля нужны, чтобы каждый раз и не рассчитывать заново, т.к. в теории будет хватать только P, Q, Exponent.
