.Net Простое шифрование RSA - PullRequest
2 голосов
/ 10 июня 2009

Я пытаюсь зашифровать что-то простое, например int или long. Самый простой способ, который я нашел, выглядит так:

int num = 2;
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
byte[] numBytes = BitConverter.GetBytes(num);
byte[] encryptedBytes = rsa.Encrypt(numBytes, true);

Проблема в том, что encryptedBytes имеет длину 128 байт. Как я могу зашифровать данные (которые я мог бы позже расшифровать), если зашифрованный результат имеет ту же длину в байтах, что и входные данные?

Я знаю, что могу сократить результат, если определю RSACryptoServiceProvider (512) или RSACryptoServiceProvider (384), но это так же мало, как и раньше.

Мне нужно 4 или 8 байтов, и 4 или 8 байтов (соответственно)

Спасибо!

*** Уточнение:

Я хочу зашифровать что-нибудь маленькое (то есть 4 или 8 байтов) и получить результат такого же размера. Какой самый простой способ сделать это в C #, при этом используя некоторые клавиши (со встроенными библиотеками), а не некоторые операции мода и сдвига

Ответы [ 2 ]

1 голос
/ 10 июня 2009

Вы можете использовать Blowfish, он имеет размер блока 64 бита / 8 байт. http://www.hotpixel.net/software.html#blowfishnet

0 голосов
/ 10 июня 2009

Это невозможно. RSA - это так называемый блочный шифр (с переменной длиной блока).

Самым известным потоковым шифром, вероятно, является RC4, но .NET не имеет встроенной реализации. Алгоритм с небольшим размером блока, как предположил Джонелф, вероятно, будет самым простым. Если количество байтов не критично, я бы использовал AES (размер блока 128 бит).

Есть ли причина, по которой вы изначально искали асимметричный алгоритм?

...