peparocha
(usa Slackware)
Enviado em 28/12/2008 - 14:49h
1. import java.security.*;
2. import javax.crypto.spec.*;
3. import javax.crypto.*;
4.
5. class CramMD5 {
6.
7. static final char[] HEX = "0123456789abcdef".toCharArray();
8.
9. static String bytesToHex (byte[] bytes) {
10. if (bytes == null) return "";
11. StringBuffer sb = new StringBuffer (2 * bytes.length);
12. for (int i = 0; i < bytes.length; ++i) {
13. sb.append (HEX[(bytes[i]>>4 ) &0xF] );
14. sb.append (HEX[bytes[i] &0xF] );
15. }
16. return sb.toString();
17. }
18.
19. public static byte[] keyedMD5 (byte[] key, byte[] challenge) throws NoSuchAlgorithmException, InvalidKeyException {
20. Mac hmac = Mac.getInstance ("HmacMD5");
21. SecretKey sk = new SecretKeySpec (key, "HmacMD5");
22. hmac.init (sk);
23. byte[] result = hmac.doFinal (challenge);
24. return result;
25. }
26.
27. public static void main(String[] args) throws Exception {
28. byte[] challenge = "<1896.[url="mailto:697170952@postoffice.reston.mci.net"]697170952@postoffice.reston.mci.net[/url]>".getBytes();
29. System.out.println (bytesToHex (keyedMD5 ("tanstaaftanstaaf".getBytes("ISO-8859-1"),
30. challenge)));
31. // deve imprimir b913a602c7eda7a495b4e6e7334d3890
32. }
33. }
Isso se deve combinando todos os fatores como:
-username
-password
-data do login
-hora do login e etc....
portanto, é totalmente "seguro"..... à não ser que você descubra uma forma de quebrar...
espero ter tirado suas dúvidas.... []'s