|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Oct 2003
Città: Pisa/Cosenza
Messaggi: 1364
|
[Java + MySQL] Errore nella memorizzazione di una password criptata con MD5
Ho un piccolo problema.
In pratica quando il sistema aggiunge un nuovo utente prima di inserire la password nel DB MySql la cripta con MD5. Codice:
private String cryptPassword(final String password) { MessageDigest md=null; try { //we use MD5 Algorithm md = MessageDigest.getInstance("MD5"); } catch (NoSuchAlgorithmException ex) { ex.printStackTrace(); } md.update(password.getBytes()); return new String(md.digest()); } Sembrava andare tutto ok, fin quando per caso non ho usato la password: "direttore". In pratica usando nel prompt-msdos l'algoritmo MD5 con input "direttore" mi restituisce questa cosa Codice:
àLa☺ ×fá`¾e¦☼â♫& ![]() Non succede con le altre password provate fin'ora. Come mai? E' lo spazio che crea problemi? Sono quei caratteri speciali? Uso male l'algoritmo MD5? come risolvo? Aiutatemi per favore ![]() NB: nel DB la password viene memorizzata come VARCHAR
__________________
![]() |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Ciao,
premetto che non me ne intendo per nulla, nel senso che non so come funziona l'agoritmo MD5 percui potrei suggerirti un'amena cazzata. Però leggendo qua: Codice:
... md.update(password.getBytes()); ... Prova ad usare il metodo .getBytes(Charset charset) : specificando un Charset esplicitamente in caso di problemi con la stringa la sequenza di caratteri malformata viene rimpiazzata con un array di byte di default per il dato Charset (Vedi le API Javadoc a riguardo) In ogni caso credo che sarebbe meglio usare la versione che prende il Charset esplicitamente definito dal programmatore, perchè il Charset di default (quello utilizzato dal sistema, ci pensa la Jvm a pescarlo) può essere diverso tra diversi sistemi operativi.
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
![]() |
![]() |
![]() |
#3 | ||
Senior Member
Iscritto dal: Oct 2003
Città: Pisa/Cosenza
Messaggi: 1364
|
Quote:
Nel senso posso farmi restituire e quindi memorizzare direttamente byte[]? Codice:
private byte[] cryptPassword(final String password) { MessageDigest md=null; try { //we use MD5 Algorithm md = MessageDigest.getInstance("MD5"); } catch (NoSuchAlgorithmException ex) { ex.printStackTrace(); } md.update(password.getBytes()); return md.digest(); } Quote:
__________________
![]() |
||
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
Quote:
Ti conviene fare come suggerito da Banryu utilizzando una charset comune (direi che UTF-8 dovrebbe andar bene così ad occhio).
__________________
![]() |
|
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Oct 2003
Città: Pisa/Cosenza
Messaggi: 1364
|
Però così ho problemi a livello di Entity Bean.
Perché l'attributo password nell'EntityBean, essendo il campo password del DB MySql un VARCHAR, è una Stringa. ![]()
__________________
![]() |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Oct 2003
Città: Pisa/Cosenza
Messaggi: 1364
|
Ok, testo subito
__________________
![]() |
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
![]() ![]()
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
|
Nota a margine: per l'amor di dio non usare MD5. E' rotto. L'algoritmo intendo.
Non va più bene per le password, usa bcrypt o sha-256 (o maggiore). Esistono implementazioni già fatte in java di entrambi gli algoritmi. E se proprio devi usare MD5 (che è un colabrodo) almeno fai il salt delle password. Fare il 'salt' vuol dire aggiungere un pezzo arbitrario (tipo il nome dell'utente, o una stringa random che poi ti tieni sul db) alla password e criptare quello e non solo la password. Esempio: invece di fare md5('direttore'), fai md5('utente.' + 'direttore'), oppure md5('$OMG!1PWNAGE!11' + 'direttore') dove la prima stringa è generata casualmente.
__________________
-> The Motherfucking Manifesto For Programming, Motherfuckers |
![]() |
![]() |
![]() |
#9 | |
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
Quote:
![]() io se non ricordo male usavo MD5 + il salt, ma non credevo che MD5 fosse combinato così male ![]()
__________________
![]() |
|
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Oct 2003
Città: Pisa/Cosenza
Messaggi: 1364
|
Ok posso usare un altro algoritmo ma prima vorrei risolvere questo problemino
![]() Niente! Utilizzando UTF-8 ho lo stesso identico risultato, forse il charset di default è proprio UTF-8? ![]() Codice:
private String cryptPassword(final String password) throws UnsupportedEncodingException { MessageDigest md=null; try { //we use MD5 Algorithm md = MessageDigest.getInstance("MD5"); } catch (NoSuchAlgorithmException ex) { ex.printStackTrace(); } md.update(password.getBytes("UTF-8")); return new String(md.digest()); } Provo ad usare un altro charset? quale?
__________________
![]() |
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Oct 2003
Città: Pisa/Cosenza
Messaggi: 1364
|
Il problema sembra risolto usando UTF-16.
Forse gli 8bit di UTF-8 non erano abbastanza per quei caratteri speciali? Posso stare sicuro secondo voi che adesso va bene con tutte le password?
__________________
![]() |
![]() |
![]() |
![]() |
#12 | |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
Però seguirei i consigli di shynia: abbandona MD5 e fai il "salt" della password. In questo modo credo tu possa raggiungere una ragionevole sicurezza.
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
![]() |
![]() |
![]() |
#13 | |
Senior Member
Iscritto dal: Oct 2003
Città: Pisa/Cosenza
Messaggi: 1364
|
Quote:
![]() Speriamo che non mi rifà lo scherzetto del Charset, qualcuno può darmi maggiore sicurezza da questo punto di vista? ![]()
__________________
![]() |
|
![]() |
![]() |
![]() |
#14 | |
Senior Member
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
|
Quote:
Qui trovi qualche link: http://www.schneier.com/blog/archive...d5_collis.html Anche sha-1 credo non stia benissimo. Se mi ricordo bene, credo sia stato dimostrato che si possano produrre collisioni ogni 2^69 invece dei soliti 2^80... però non ti fidare, cerca qualche paper che avvalori questa cosa.
__________________
-> The Motherfucking Manifesto For Programming, Motherfuckers |
|
![]() |
![]() |
![]() |
#15 | |
Senior Member
Iscritto dal: Oct 2003
Città: Pisa/Cosenza
Messaggi: 1364
|
Quote:
Non sarà accessibile dall'esterno della LAN e gli utenti registrati non supereranno la dozzina... Credo che con SHA posso stare sicuro, no?
__________________
![]() |
|
![]() |
![]() |
![]() |
#16 | |
Senior Member
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
|
Quote:
![]() Cmq se vuoi stare dalla parte dei bottoni, come si dice da me, dai un'occhiata a questa libreria http://www.softabar.com/home/content/view/46/68/ Ho dato un'occhiata veloce ai javadoc e nella classe ShaUtil c'è un metodo per convertire l'array di byte in esadecimale (sotto forma di stringa). Cosi stai a posto e usi ascii.
__________________
-> The Motherfucking Manifesto For Programming, Motherfuckers |
|
![]() |
![]() |
![]() |
#17 | |
Senior Member
Iscritto dal: Oct 2003
Città: Pisa/Cosenza
Messaggi: 1364
|
Quote:
Appena posso lo testo e vi faccio sapere.
__________________
![]() |
|
![]() |
![]() |
![]() |
#18 | |
Senior Member
Iscritto dal: Oct 2003
Città: Pisa/Cosenza
Messaggi: 1364
|
sul forum di html.it ho trovato questo
Quote:
__________________
![]() |
|
![]() |
![]() |
![]() |
#19 |
Senior Member
Iscritto dal: Dec 2001
Città: Milano
Messaggi: 545
|
Prova anche a documentarti sulla codifica Base64
![]()
__________________
Angus the Hunter @ Realm of magic | Angus Young @ Batracer °SetiEmperor°| Ninja Technologies { qualunque cosa sia, è veloce e fa male (cit.) } |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 15:16.