Przyjmijmy, mam następujący kod Java, aby wygenerować parę kluczy publiczny-prywatny:szyfrowania RSA w Javie, odszyfrować w PHP
KeyPairGenerator generator = KeyPairGenerator.getInstance ("RSA");
SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
generator.initialize (1024, random);
KeyPair pair = generator.generateKeyPair();
RSAPrivateKey priv = (RSAPrivateKey)pair.getPrivate();
RSAPublicKey pub = (RSAPublicKey)pair.getPublic();
// Sign a message
Signature dsa = Signature.getInstance("SHA1withRSA");
dsa.initSign (priv);
dsa.update ("Hello, World".getBytes(), 0, "Hello, World".length());
byte[] out = dsa.sign();
/* save the signature in a file */
FileOutputStream sigfos = new FileOutputStream("sig");
sigfos.write(out);
sigfos.close();
Jak można o i odszyfrować plik „sig” w PHP? Przeczytałem post: https://stackoverflow.com/a/1662887/414414, który dostarcza funkcję konwertowania pliku DER
na PEM
(Zakładam, że również zapiszę klucz publiczny z Java).
Próbowałem coś takiego:
$key = openssl_pkey_get_public ("file://pub_key.pem");
$data = null;
openssl_public_decrypt (file_get_contents ("sig"), $data, $key);
echo $data, "\n";
powodzeniem odszyfrowuje wiadomość, ale jest wiele dziwnych znaków.
Nasz scenariusz to klient Java, który wysyła wiadomości do serwera PHP, ale szyfruje dane za pomocą klucza prywatnego. PHP wie o kluczu publicznym, którego powinien użyć do odszyfrowania i sprawdzenia poprawności wiadomości.
Przeczytałem wiele postów dotyczących tego problemu tutaj na SO, ale zdałem sobie sprawę, że jest to nieco specyficzny problem, szczególnie jeśli używa się różnych algorytmów itp. Tak mi przykro, jeśli to może być duplikat.
Wszelkie opinie są bardzo mile widziane!
"Pomyślnie odszyfrowuje wiadomość, ale ma wiele dziwnych postaci." - możesz o tym powiedzieć? Czy to może być problem z kodowaniem? –
Czy zdekodowana wiadomość wygląda na oryginalny tekst, czy jest całkowicie zniekształcona? –
czy próbujesz weryfikować wiadomości wysyłane między Javą i PHP, czy też je szyfrować? lub oba? –