Op sourceforge loopt een project waar ik een web-based pagina aan wil koppelen. Via PHP moet ik dus kunnen inloggen op de user tabel van dat systeem.
Nu staat op hun wiki dat hun wachtwoorden gecodeerd met sha1, en vervolgens base64.
Dit is natuurlijk niet moeilijk te realiseren in PHP:
Echter krijg ik hiermee niet het zelfde wachtwoord...
Dus ik heb de source van het systeem doorgekeken, en ben uiteindelijk terecht gekomen bij het bestand die de wachtwoorden om zet:
Wat hier dus gebeurd is dat ze het wachtwoord eerst nog omzetten in UTF-8 bytes als ik het goed begrijp.
Dat is denk ik ook de reden waarom mijn wachtwoord niet gelijk is aan het wachtwoord in de database.
Echter zou ik nu niet weten hoe ik dit aanpak in PHP, want utf8_encode erover heen halen werkt:
Output:
Ik hoop dat iemand mij op weg kan helpen hiermee, want ik kom op dit moment echt niet verder
Paul
Nu staat op hun wiki dat hun wachtwoorden gecodeerd met sha1, en vervolgens base64.
Dit is natuurlijk niet moeilijk te realiseren in PHP:
PHP:
1
| $string = base64_encode(sha1('password')); |
Echter krijg ik hiermee niet het zelfde wachtwoord...
Dus ik heb de source van het systeem doorgekeken, en ben uiteindelijk terecht gekomen bij het bestand die de wachtwoorden om zet:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
| import javax.servlet.ServletException; import java.io.UnsupportedEncodingException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import sun.misc.BASE64Encoder; public final class CryptoSHA1BASE64 { public static String encriptar(String textoplano) throws ServletException { MessageDigest md = null; try { md = MessageDigest.getInstance("SHA"); // SHA-1 generator instance } catch(NoSuchAlgorithmException e) { throw new ServletException(e.getMessage()); } try { md.update(textoplano.getBytes("UTF-8")); // Message summary generation } catch(UnsupportedEncodingException e) { throw new ServletException(e.getMessage()); } byte raw[] = md.digest(); // Message summary reception String hash = (new BASE64Encoder()).encode(raw); // Encoding to BASE64 return hash; } } |
Wat hier dus gebeurd is dat ze het wachtwoord eerst nog omzetten in UTF-8 bytes als ik het goed begrijp.
Dat is denk ik ook de reden waarom mijn wachtwoord niet gelijk is aan het wachtwoord in de database.
Echter zou ik nu niet weten hoe ik dit aanpak in PHP, want utf8_encode erover heen halen werkt:
PHP:
1
2
| echo sha1('password') . "<br />"; echo sha1(utf8_encode('password')); |
Output:
code:
1
2
| 5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8 5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8 |
Ik hoop dat iemand mij op weg kan helpen hiermee, want ik kom op dit moment echt niet verder
Paul