10

Po przeczytaniu artykułów o metodach kryptograficznych (symetrycznych i asymetrycznych). Wiele artykułów mówi, że klucz prywatny jest używany do szyfrowania i odszyfrowywania danych. Klucz publiczny służy do szyfrowania danych. Ale kiedy Próbuję rozpocząć wdrażanie w Javie Nie mogę używać klucza prywatnego do szyfrowania i odszyfrowywania danych (używam algorytmu RSA)? Jeśli to możliwe, podaj mi link. Jeśli nie obsługuje, proszę odpowiedzieć, dlaczego nie obsługuje?Szyfrowanie i odszyfrowywanie za pomocą klucza prywatnego w języku Java

// Szyfrowanie

Cipher encrypt=Cipher.getInstance("RSA"); 
encrypt.init(Cipher.ENCRYPT_MODE, privatekey); 
byte[] encryptedMessage=encrypt.doFinal(msg.getBytes()); 

// Deszyfruj

Cipher decrypt=Cipher.getInstance("RSA"); 
decrypt.init(Cipher.DECRYPT_MODE, privateKey); 
byte[] decryptedMessage=decrypt.doFinal(encryptedMessage); 

Odpowiedz

4

Jak Public Private Key Encryption pracuje:

  1. Po zaszyfrowaniu coś ze swojej nikomu klucza prywatnego ze swoją klucz publiczny może go odszyfrować.
  2. JEŚLI zaszyfrujesz coś za pomocą swojego klucza publicznego, tylko twój klucz prywatny może go odszyfrować.

Musisz wygenerować parę publicznych kluczy prywatnych. Klucz prywatny jest właśnie dla Ciebie, a klucz publiczny można przekazać osobom, którym ufasz.

Jak wygenerować pary kluczy?

$ openssl genrsa -out private_key.pem 1024 
$ openssl rsa -pubout -in private_key.pem -out public_key.pem 

Albo idź tu zrobić w Javie ->JAVA RSA Kiedy to zrobisz wrócić i zadawać więcej pytań

-3

klucz symetryczny ma tylko jednego klucza, który jest używany do szyfrowania i deszyfrowania obu. Jest to tajny klucz, czasami nazywany również kluczem prywatnym między nadawcą a odbiorcą. Kryptografia klucza publicznego składa się z 2 kluczy, prywatnego i publicznego. Jeśli szyfrujesz za pomocą jednego, możesz odszyfrować drugi. -Jeśli używasz klucza prywatnego do zaszyfrowania wiadomości, każdy może odszyfrować go za pomocą Twojego klucza publicznego. Jest to przypadek, w którym uwierzytelniasz swój dokument, a inne sprawdzają, używając klucza publicznego - Jeśli chcesz wysłać zaszyfrowaną wiadomość do kogoś, musisz wysłać wiadomość za pomocą swojego klucza publicznego. W takim przypadku wiadomość może zostać odszyfrowana przy użyciu tylko klucza prywatnego, który tylko ktoś ma.

Więc w kryptografii klucza publicznego RSA gdzie masz 1 publiczną i 1 klucz prywatny oraz u trzeba szyfrować z jednej i deszyfrowania z innym natomiast w kryptografii symetrycznej AES,DES masz tylko 1 tajnego klucza prywatnego, który jest używany do szyfrowania i deszyfrowania zarówno .

13

Aby wykonać szyfrowanie RSA, należy zaszyfrować klucz publiczny i odszyfrować klucz prywatny. Ponadto, użytkownik powinien używać używając dobrze zdefiniowanej metody wypełniania, takiej jak wypełnianie zgodne z PKCS # 1 v1.5 lub - jeśli jest dostępne - dopełnianie OAEP.

Szyfrowanie za pomocą klucza prywatnego RSA nie ma sensu, ponieważ każdy z kluczem publicznym może odszyfrować. Istnieje coś takiego jak "raw RSA", który jest w zasadzie modułową potęgowaniem, ale to powinno być używane tylko z innym schematem wypełnienia do generowania podpisów. W takim przypadku wszyscy mają klucz publiczny do "odszyfrowania" w celu zweryfikowania podpisu.

Więcej informacji here i here.

szyfrowanie Tak jest:

// specify mode and padding instead of relying on defaults (use OAEP if available!) 
Cipher encrypt=Cipher.getInstance("RSA/ECB/PKCS1Padding"); 
// init with the *public key*! 
encrypt.init(Cipher.ENCRYPT_MODE, publicKey); 
// encrypt with known character encoding, you should probably use hybrid cryptography instead 
byte[] encryptedMessage = encrypt.doFinal(msg.getBytes(StandardCharsets.UTF_8)); 

i deszyfrowania jest:

Cipher decrypt=Cipher.getInstance("RSA/ECB/PKCS1Padding"); 
decrypt.init(Cipher.DECRYPT_MODE, privateKey); 
String decryptedMessage = new String(decrypt.doFinal(encryptedMessage), StandardCharsets.UTF_8); 
+0

nie jest podpisywanie kryptograficznych szyfrowania z kluczem prywatnym? –

+2

@PeterBecker Lepiej nie myśleć o tym w ten sposób. Sprawdź [RFC 3447 część 5.2] (http://tools.ietf.org/html/rfc3447#page-12): "... Główna operacja matematyczna w każdym prymitymie jest potęgowaniem, jak w prymitywach szyfrowania i deszyfrowania Sekcja 5.1 RSASP1 i RSAVP1 są takie same jak RSADP i RSAEP, z wyjątkiem nazw ich argumentów wejściowych i wyjściowych, są one rozróżniane, ponieważ są one przeznaczone do różnych celów: ". Dotyczy to tylko "podręcznika" lub "surowego" RSA, który nie nadaje się do normalnych celów kryptograficznych. Obicie jest integralną częścią schematu i różni się. –

+0

Punkt wzięty. Naprawdę znalazłem złamany schemat kryptograficzny, gdy użyty został czysty RSA (problem jeden) i dwa klucze zostały użyte w niewłaściwy sposób. Bouncy Castle pozwala ci to zrobić, a potem cicho zmienia dopełnienie, co w tym przypadku nie oznacza randomizacji szyfrowania. –

Powiązane problemy