To Argos : Beru zpět - přece jen s Javou jsem začal oproti php poměrně nedávno a tak jsem si ještě nezvyknul na to že dva řetězce se musí porovnávat .equals(); - vše jede jak má, akorát zrovna asi když jsem si vypisoval mezihodnoty, tak jsem zadal jiný řetězec ze kterého se vypisovalo, takže i výsledný hash byl jiný... :-[
Příspěvky odeslané z IP adresy 89.248.248.–
Argos
Argos
Ahoj, potřeboval bych se přihlásit do Joomly ze své java aplikace, nicméně mám problém s porovnáním hesla, v Joomle se dané heslo porovnává následovně:
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);
}
do Javy jsem danou funkci převedl jako:
private boolean hashPassword(String txtPass2,String dbEntry) {
String hashword = null;
String orig = null;
String salt = null;
try {
StringTokenizer tk = new StringTokenizer(dbEntry,":");
orig = tk.nextToken();
salt = tk.nextToken();
MessageDigest md5 = MessageDigest.getInstance("MD5");
md5.update((txtPass2+salt).getBytes(),0,(txtPass2+salt).length());
BigInteger hash = new BigInteger(1, md5.digest());
hashword = hash.toString(16);
} catch (NoSuchAlgorithmException nsae) {
}
return (hashword==orig);
}
a následně samozřejmě
boolean hash = hashPassword(txtPass, dbEntry);
nicméně řetězec který si z vloženého textu generuje php a java se prostě liší(délka stejná), neví někdo kdě dělám chybu? děkuji za každé nakopnutí správným směrem... ;-).