2009-09-30 15 views
41

Podczas wywoływania następujących funkcji:Szyfrowanie RSA, uzyskiwanie bad długość

byte[] bytes = rsa.Encrypt(System.Text.UTF8Encoding.UTF8.GetBytes(stringToEncrypt), true); 

Jestem teraz otrzymuję błąd: złe długość.

Z mniejszym ciągiem działa, wszelkie pomysły na temat tego, jaki może być problem, że ciąg znaków, który przekazuję, ma mniej niż 200 znaków.

Odpowiedz

58

Szyfrowanie RSA jest tylko średnie dla małych ilości danych, ilość danych, które można zaszyfrować, zależy od rozmiaru klucza, którego używasz, na przykład dla 1024-bitowych kluczy RSA i wypełnienia PKCS # 1 V1.5 , możesz zaszyfrować maksymalnie 117 bajtów za pomocą klucza RSA 2048, możesz zaszyfrować 245 bajtów.

Istnieje ku temu dobry powód, asymetryczne szyfrowanie jest kosztowne obliczeniowo. Jeśli chcesz zaszyfrować duże ilości danych, powinieneś używać szyfrowania symetrycznego. Ale co, jeśli chcesz nie-odrzucenia? Cóż, wtedy możesz użyć obu. Tworzysz klucz symetryczny i wymieniasz go za pomocą szyfrowania asymetrycznego, a następnie bezpiecznie wymieniasz klucz symetryczny, aby zaszyfrować duże ilości danych. To właśnie SSL i WS-Secure pod okładkami.

+0

Znasz off rękę co .net object I powinien być używany do szyfrowania ciągi górę do 500 znaków? –

+0

Dowolny z algorytmów symetrycznych. To zależy od celu, w jakim chcesz go zaszyfrować. Prawdopodobnie najlepiej to sformułować jako kolejne pytanie. – blowdart

+2

Nie chodzi tylko o to, że jest on obszerny pod względem obliczeniowym. Algorytm RSA szyfruje określoną liczbę, tworząc inną liczbę. Ze względu na sposób działania algorytmu maksymalny rozmiar tej liczby. Im szerszy klucz, tym większa liczba możliwych do zaszyfrowania. Klucz 1024-bitowy ma szerokość 128 bajtów, a klucz 2048-bitowy ma 256 bajtów. Każdy może zaszyfrować liczbę o maksymalnej szerokości nieco mniejszej niż jej własna szerokość. Jeśli numer wejściowy jest zbyt duży, wyjście będzie takie samo, jak szyfrowanie innej liczby, która znajduje się w zasięgu, i nie ma sposobu, aby stwierdzić, które było rzeczywiste wejście. –

35

Dla przyszłych wyszukiwań dotyczących RSA złe długości wyjątkami ...

Można obliczyć maksymalną liczbę bajtów, które mogą być szyfrowane za pomocą klucza o rozmiarze szczególności następujące:

((rozmiar klucza - 384)/8) + 37

Jeśli jednak optymalna asymetryczne szyfrowanie przekładki (OAEP) parametr zauważyć, jak to jest w oryginalnej stanowiska, może być używany do obliczania maksymalnego bajtów następujące:

((rozmiar klucza - 384)/8) + 7

Prawne rozmiary kluczy są 384 thru 16384 o wielkości przeskoku 8.

15

Jak wyjaśniono powyżej, roztwór do wyjątków „długość zły” typ jest do hybrydyzacji użycie szyfrowania symetrycznego i asymetrycznego, tak że rozmiar tekstu, który szyfrujesz, nie jest ograniczony przez rozmiar klucza. Zasadniczo używasz szyfrowania RSA do asymetrycznego szyfrowania losowego klucza .

For encryption:

  1. Generate a random key of the length required for symmetrical encryption technique such as AES or Rijndael.

  2. Symmetrically encrypt your text/data using AES/Rijndael using the random key generated in step 1.

  3. Using RSA, asymmetrically encrypt the random key generated in step 1.

For decryption:

  1. First decrypt the AES/Rijndael-generated random key using your private RSA key.

  2. Then decrypt the original text/data using the RSA-decrypted random key

na demonstrację, to może chcesz mieć wygląd to następujący przykład w C#:

http://www.technical-recipes.com/2013/using-rsa-to-encrypt-large-data-files-in-c/

Powiązane problemy