• User Newbie

    Usare i dati di login di Joomla con asp.net

    Qualcuno sa come poter effettuare il login in asp.net usando il database di joomla 1.5?
    La password è memorizzata nel database MySql con un hash MD5, ma non sono riuscito a capire come ricrearla uguale per confrontare se quella inserita combacia con quella nel database...
    Qualcuno mi può aiutare?


  • User

    non so quale sia il problema che incontri: le password di joomla sono memorizzate come hai detto te, cioè oscurate con la funzione hash MD5, per giunta senza aggiungere sale.
    Per creare l'hash della parola "password" basta quindi fare MD5('password') nella query SQL, o usare il metodo ComputeHash della classe MD5CryptoServiceProvider e poi creare la rappresentazione esadecimale dei byte ottenuti


  • User Newbie

    E' esattamente quello che faccio ma non mi ritorna la stessa stringa che c'è sul database.
    Ho trovato su joomlaaa.com una classe java dalla quale ho preso spunto per crearne una in C# ma non c'è stato niente da fare?
    La classe è questa:

    public class Joomla15PasswordHash
    {
    public static boolean check(String passwd,String dbEntry) {
    if (passwd==null || dbEntry==null || dbEntry.length()==0)
    throw new IllegalArgumentException();
    String[] arr = dbEntry.split(":",2);
    if (arr.length==2) {
    // new format as {HASH}:{SALT}
    String cryptpass = arr[0];
    String salt = arr[1];

    return md5(passwd+salt).equals(cryptpass);
    } else {
    // old format as {HASH} just like PHPbb and many other apps
    String cryptpass = dbEntry;

    return md5(passwd).equals(cryptpass);
    }
    }

    static Random _rnd;
    
    public static String create(String passwd) {
       StringBuffer saltBuf = new StringBuffer();
       synchronized (Joomla15PasswordHash.class) {
    

    if (_rnd==null) _rnd=new SecureRandom();
    int i;
    for (i=0;i<32;i++) {
    saltBuf.append(Integer.toString(_rnd.nextInt(36),36));
    }
    }
    String salt = saltBuf.toString();

       return md5(passwd+salt)+":"+salt;
    }
    
    /** Takes the MD5 hash of a sequence of ASCII or LATIN1 characters,
     *  and returns it as a 32-character lowercase hex string.
     *
     *  Equivalent to MySQL's MD5() function 
     *  and to perl's Digest::MD5::md5_hex(),
     *  and to PHP's md5().
     *
     *  Does no error-checking of the input,  but only uses the low 8 bits
     *  from each input character.
     */
    private static String md5(String data) {
       byte[] bdata = new byte[data.length()]; int i; byte[] hash;
    
       for (i=0;i<data.length();i++) bdata*=(byte)(data.charAt(i)&0xff );
    
       try {
          MessageDigest md5er = MessageDigest.getInstance("MD5");
          hash = md5er.digest(bdata);
       } catch (GeneralSecurityException e) { throw new RuntimeException(e); }
    
       StringBuffer r = new StringBuffer(32);
       for (i=0;i<hash.length;i++) {
          String x = Integer.toHexString(hash*&0xff);
          if (x.length()<2) r.append("0");
          r.append(x);
       }
       return r.toString();      
    }
    

    }


  • User

    mamma mia quanto codice!

    using System.Security.Cryptography;
    using System.Text;
    
    static string getHash(string psw)
    {
        MD5 md5 = new MD5CryptoServiceProvider();
        byte[] hash = Encoding.UTF8.GetBytes(psw);
        hash = md5.ComputeHash(hash);
        StringBuilder sb = new StringBuilder();
        foreach (byte b in hash)
             sb.Append(b.ToString("x2"));
        return sb.ToString();
    }
    

  • User Newbie

    E' la stessa cosa che ho fatto io!!!

    Il problema è che il risultato non è uguale a quello salvato nel database.
    La classe che java che ho messo sopra implementava anche il salt, e anche usando il salt, il risultato non cambia....

    Ricordo che sto parlando di Joomla 1.5
    C'è qualcosa che mi sfugge?


  • User

    hmm
    prima di rispondere avevo controllato nella mia installazione di joomla (1.5.6) e assunto (erroneamente) che anche la tua installazione non usasse salt