Buonasera a tutti.
Tale discussione è a metà tra php e javascript. Non esistendo una sezione condivisa utilizzo quella javascript poichè il problema che ho è relativo proprio a javascript.
A scopo di esercizio vorrei creare un form che utilizza RSA per la trasmissione di username e password criptati. In particolare questo il procedimento a cui ho pensato.
- Utilizzare la libreria PHP dal nome PHPseclib per generare la coppia di chiavi pubblica e privata;
- Inserire in un cookie la chiave pubblica;
- Utilizzare la libreria Javascript dal nome jsencrypt per crittare i campi username e password prima dell'invio del form con la chiave pubblica (naturalmente) salvata nel cookie.
- Una volta ricevuti, decriptare i campi con PHP.
Un po' di codice a corredo:
Codice PHP:
require_once('Crypt/RSA.php');$rsa = new Crypt_RSA();$rsa->setPrivateKeyFormat(CRYPT_RSA_PRIVATE_FORMAT_PKCS1);$rsa->setPublicKeyFormat(CRYPT_RSA_PUBLIC_FORMAT_PKCS1);extract($rsa->createKey());setcookie("publickey", $publickey, time()+3600);
Incontro (penso) a questo punto il primo problema:
mentre la variabile $publickey ha una struttura del tipo:
codice:
-----BEGIN RSA PUBLIC KEY-----MIGJAoGBALSQ137ciOJlO32j7bWHpuLFtgaE19tbU6J3Xs8WA+qYsDNkKxEnDqQR
mNh6cbt6fpSdRuHCYcyv9VtO854glmQANTxm98tPOaYzEEty5efIVVHM18PNzhkT
lOwXicB3mZgtxfjNcRYuAfTyc8AVDuzcs/3dm9dSHK0enovPAtytAgMBAAE=
-----END RSA PUBLIC KEY-----
quella prelevata con javascript è del tipo:
codice:
-----BEGIN+RSA+PUBLIC+KEY-----%0D%0AMIGJAoGBALSQ137ciOJlO32j7bWHpuLFtgaE19tbU6J3Xs8WA%2BqYsDNkKxEnDqQR%0D%0AmNh6cbt6fpSdRuHCYcyv9VtO854glmQANTxm98tPOaYzEEty5efIVVHM18PNzhkT%0D%0AlOwXicB3mZgtxfjNcRYuAfTyc8AVDuzcs%2F3dm9dSHK0enovPAtytAgMBAAE%3D%0D%0A-----END+RSA+PUBLIC+KEY-----
Naturalmente trovo il primo problema poichè la funzione della libreria javascript non critta il messaggio (forse trovando irregolare la chiave).
codice:
var encrypt = new JSEncrypt();
var publickey = leggiCookie('publickey');
encrypt.setPublicKey(publickey);
var encrypted = encrypt.encrypt($('#input').val());
document.example.crittato.value = encrypted;
Nel campo "crittato" del form "example" mi compare la dicitura false.
Chiedo a voi del forum se questa tecnica potrebbe essere utile allo sniffing dei dati essendo questi decifrabili solo con la chiave segreta custodita sul server.
Inoltre: come mai nel cookie la chiave è salvata in modo diverso (+ che sostituiscono spazi e %che compaiono)?
Come sempre grazie in anticipo.