Si supponga Ho il seguente codice Java per generare una coppia di chiavi pubblica-privata:crittografia RSA in Java, decriptare in 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();
come si potrebbe fare per e decrittografare il file "sig" in PHP? Ho letto il post: https://stackoverflow.com/a/1662887/414414 che fornisce una funzione per convertire un file DER
in PEM
(si supponga che salvi anche la chiave pubblica da Java).
Ho provato qualcosa di simile:
$key = openssl_pkey_get_public ("file://pub_key.pem");
$data = null;
openssl_public_decrypt (file_get_contents ("sig"), $data, $key);
echo $data, "\n";
Decripta correttamente il messaggio, ma è molti personaggi strani.
Il nostro scenario è un client Java che invia messaggi a un server PHP, ma crittografa i dati con una chiave privata. PHP conosce la chiave pubblica, che dovrebbe usare per decifrare e convalidare il messaggio.
Ho letto molti post su questo problema qui su SO, ma ho capito che questo è un problema un po 'specifico, soprattutto se ci sono algoritmi diversi in uso, ecc. Quindi scusa se questo può essere un duplicato
Qualsiasi feedback è molto apprezzato!
"Decifra correttamente il messaggio, ma sono molti caratteri strani." - puoi essere più specifico a riguardo? Potrebbe semplicemente essere un problema di codifica? –
Il messaggio decodificato assomiglia al testo originale o è completamente confuso? –
stai provando a verificare i messaggi inviati tra Java e PHP o crittografarli? o entrambi? –