2009-12-26 7 views
21

Ho una finestra modale di dialogo jquery per collegarmi al mio sito web. Quando un utente fa clic login fa una richiesta POST a un file login.php come segue:Come usare MD5 in javascript per trasmettere una password

$.post(
     'includes/login.php', 
     { user: username, pass: password }, 
     onLogin, 
     'json'); 

Come faccio a fare un MD5 su tale password prima di metterlo nella richiesta post? Inoltre, ho le password dell'utente memorizzate in un database MySQL usando MD5(), quindi mi piacerebbe solo confrontare la versione memorizzata della password con l'MD5 della password inviata. Grazie a chiunque risponda.

+13

Meglio utilizzare SSL per proteggere la connessione. – Gumbo

+0

Concordato con Gumbo. Quindi sul lato server usa SHA256 – AntonioCS

+2

Ho SSL abilitato, ma mi piacerebbe avere la password crittografata all'interno dell'intestazione http criptata. – adhanlon

risposta

27

crypto-js è una ricca libreria javascript contenente molti algoritmi di crittografia.

Tutto quello che dovete fare è semplicemente chiamare CryptoJS.MD5(password)

$.post(
    'includes/login.php', 
    { user: username, pass: CryptoJS.MD5(password) }, 
    onLogin, 
    'json'); 
+12

Questo plugin non è più disponibile per qualche motivo. Esiste una versione qui: http://www.richardpeacock.com/dev/files/jquery.md5.js.txt – Rob

+5

Probabilmente dovresti usare il molto più standard http://code.google.com/p/crypto- js/crypto-js e includi i JS per la crittografia di cui hai bisogno. –

+2

Penso che questa risposta abbia bisogno di cure amorevoli e attenzione dato che il plugin collegato sembra non essere disponibile ora. – Kev

4

Si potrebbe desiderare di controllare questa pagina: http://pajhome.org.uk/crypt/md5/

Tuttavia, se la protezione della password è importante, si dovrebbe davvero essere usando qualcosa come SHA256 (MD5 non è IIRC crittograficamente sicuro). Inoltre, potresti prendere in considerazione l'idea di utilizzare TLS e ottenere un certificato in modo da poter utilizzare https.

+0

Grazie per la risposta, sto utilizzando https per il mio sito Web, ma per qualche ragione apache utilizza la crittografia quando trasmette la pagina, ma dopo che la pagina è stata caricata utilizza ancora https, ma la pagina non è crittografata. Pensi che continuerà a crittografare le informazioni di accesso quando vengono inviate? – adhanlon

+0

Non sono un esperto, ma puoi provare a packet annusare una macchina di prova per vedere se è crittografata o meno. – SapphireSun

26

Se qualcuno è annusando il tuo testo normale traffico HTTP (o cache/biscotti) per le password semplicemente ruotando la password in un hash non aiuta - La password di hash può essere "riprodotta" così come il testo semplice. Il cliente avrebbe bisogno di hash della password con qualcosa di un po 'casuale (come la data e l'ora) veda la sezione "AUTH CRAM-MD5" qui: http://www.fehcom.de/qmail/smtpauth.html

+4

+1 a l'unica risposta che spiega che questo non è sicuro. – Pablo

+0

È sicuro se si utilizza SSL e la domanda non dice che non lo è. – malthe

+0

@malthe L'autenticazione di base è sicura usando SSL – Motes

2

In risposta a Jt. Hai ragione, l'HTML con solo la password è suscettibile all'uomo nell'attacco centrale. Tuttavia, è possibile seminare con un GUID dal server ...

$.post(
    'includes/login.php', 
    { user: username, pass: $.md5(password + GUID) }, 
    onLogin, 
    'json'); 

Ciò sconfiggere l'Uomo-in-the middle ... in che il server potrebbe generare un nuovo GUID per ogni tentativo.

+2

sì, questa è una buona idea. Questo tipo di approccio sfida/risposta è anche trattato in http://pajhome.org.uk/crypt/md5/auth.html – Menace

15

In questo caso, suggerisco di utilizzare CryptoJS.

Fondamentalmente CryptoJS è una raccolta crescente di algoritmi crittografici standard e sicuri implementati in JavaScript utilizzando le migliori pratiche e modelli. Sono veloci e hanno un'interfaccia coerente e semplice.

Quindi in caso si voglia calcolare hash (MD5) della stringa password, procedere come segue:

<script src="http://crypto-js.googlecode.com/svn/tags/3.0.2/build/rollups/md5.js"></script> 
<script> 
    var passhash = CryptoJS.MD5(password).toString(); 

    $.post(
     'includes/login.php', 
     { user: username, pass: passhash }, 
     onLogin, 
     'json'); 
</script> 

Quindi questo script inviare hash della stringa password al server.

Per ulteriori informazioni e supporto su altri algoritmi di hash calcolo si può visitare il sito:

http://code.google.com/p/crypto-js/

+0

risposta piacevole :) –

+0

Grazie per questa risposta ... per coloro che sono alla ricerca di crittografia/decrittografia tra JavaScript e C#/VB.NET per javascript raccomandato è questa risposta e potresti anche voler dare un'occhiata a questo http://msdn.microsoft.com/en-us/library/system.security.cryptography.md5(v=vs .110) .aspx per C# –