Jeg er ved at lave en klient der bruger HMAC-MD5 authentication ved login...
Man får "secretKey" tilsendt i hexadecimale tal
og det forventes at HMAC-MD5 resultatet bliver retuneret som et hexadecimalt tal
jeg har så fundet noget kode til at genere denne HMAC-MD5 key, men der bruger de en KeyGenerator.
Hvordan bruger jeg den key jeg får når jeg "challenger" serveren i stedet for den key de laver i den her kode?
-------------
try { // Generate a key for the HMAC-MD5 keyed-hashing algorithm; see RFC 2104 // In practice, you would save this key. KeyGenerator keyGen = KeyGenerator.getInstance("HmacMD5"); SecretKey key = keyGen.generateKey();
// Create a MAC object using HMAC-MD5 and initialize with key Mac mac = Mac.getInstance(key.getAlgorithm()); mac.init(key);
String str = "This message will be digested";
// Encode the string into bytes using utf-8 and digest it byte[] utf8 = str.getBytes("UTF8"); byte[] digest = mac.doFinal(utf8);
// If desired, convert the digest into a string String digestB64 = new sun.misc.BASE64Encoder().encode(digest); } catch (InvalidKeyException e) { } catch (NoSuchAlgorithmException e) { } catch (UnsupportedEncodingException e) { }
Har lavet en løsning hvis nogen skulle værre interasseret:
public String MD5Password() { // Convert the password to MD5 hex string MessageDigest encrypt = null; String hexMD5Password = null; try { encrypt = MessageDigest.getInstance("MD5"); hexMD5Password = toHex(encrypt.digest(this.password.getBytes())); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } // username and MD5 hex password added String data = this.username.toLowerCase() + hexMD5Password; System.out.println(data);
// create key object SecretKey key = new SecretKeySpec(secretKey.getBytes(), "HmacMD5");
// Create a MAC object using HMAC-MD5 and initialize with key Mac mac = null; try { mac = Mac.getInstance("HmacMD5"); mac.init(key); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (InvalidKeyException e) { e.printStackTrace(); }
// Encode the string into bytes using utf-8 and digest it byte[] utf8 = data.getBytes(); this.MD5Password = toHex(mac.doFinal(utf8));
// If desired, convert the digest into a string // String digestB64 = new sun.misc.BASE64Encoder().encode(digest);
return this.MD5Password; }
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.