Avatar billede daniboy Nybegynder
01. april 2005 - 14:09 Der er 1 løsning

hmac-md5 login

Hej Eksperter

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) {
    }
Avatar billede daniboy Nybegynder
01. april 2005 - 15:02 #1
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;
    }
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester