Follow along with the video below to see how to install our site as a web app on your home screen.
Nota: This feature may not be available in some browsers.
http://host?parametro1=¶metro2=parametroN=&auth=HASH
String resultString = url.replaceAll("http://", "");
int endIndex = resultString.indexOf("&auth");
resultString = resultString.substring(0, endIndex);
return MondadoriHelpers.generate_HMAC_SHA1(resultString, privateKey);
http://iflipit.mondadorieducation.it/sync/getEditorNotes.php?srd=&srnm=&iss=TVM1MDQ1MV8yMDE1&t=1465141330757&track_os=ios&track_osversion=9.3.2&track_device=tablet&track_uid=&track_appversion=4.3.4&auth=d95e6a3d094397da13f9f8b272163f67b1cc9053
Sì, l'ho capito. Il parametro comunque è solo auth, non &auth. Scenario: ottenere il valore del parametro 'auth', che a sua volta è l'hash. Se è questo quello che vuoi, basandomi sulla tua informazione che il length dell'hash è costante (vuol dire che che se l'hash cambierà il length sarà uguale, sei sicuro?)... La prima opzione:Certo, intanto ti ringrazio per la risposta. Conosco addirittura tutto l'URL, quindi potrebbe risultare più semplice fare alcuni test. La lenght dell'hash è di 40 caratteri.
Codice:http://iflipit.mondadorieducation.it/sync/getEditorNotes.php?srd=&srnm=&iss=TVM1MDQ1MV8yMDE1&t=1465141330757&track_os=ios&track_osversion=9.3.2&track_device=tablet&track_uid=&track_appversion=4.3.4&auth=d95e6a3d094397da13f9f8b272163f67b1cc9053
Nello specifico, vorrei sapere la correlazione tra l'hash (parametro &auth) e il resto dell'URL.
http://iflipit.mondadorieducation.it/sync/getEditorNotes.php?srd=&srnm=&iss=TVM1MDQ1MV8yMDE1&t=1465141330757&track_os=ios&track_osversion=9.3.2&track_device=tablet&track_uid=&track_appversion=4.3.4&auth=
iflipit.mondadorieducation.it/sync/getEditorNotes.php?srd=&srnm=&iss=TVM1MDQ1MV8yMDE1&t=1465141330757&track_os=ios&track_osversion=9.3.2&track_device=tablet&track_uid=&track_appversion=4.3.4&auth=
iflipit.mondadorieducation.it/sync/getEditorNotes.php?srd=&srnm=&iss=TVM1MDQ1MV8yMDE1&t=1465141330757&track_os=ios&track_osversion=9.3.2&track_device=tablet&track_uid=&track_appversion=4.3.4
Allora scusami, ho capito male io. Non era ben chiaro quello che hai chiesto.Fin qui c'ero arrivato pure io. L'obiettivo è calcolare l'hash (&auth) avendo l'URL in questo formato:
...ovvero senza il valore del parametro &auth.Codice:http://iflipit.mondadorieducation.it/sync/getEditorNotes.php?srd=&srnm=&iss=TVM1MDQ1MV8yMDE1&t=1465141330757&track_os=ios&track_osversion=9.3.2&track_device=tablet&track_uid=&track_appversion=4.3.4&auth=
Secondo il sorgente dell'applicativo, i passaggi sono tre:
1) Rimuovere "http://" all'inizio, che da questo risultato:
Codice:iflipit.mondadorieducation.it/sync/getEditorNotes.php?srd=&srnm=&iss=TVM1MDQ1MV8yMDE1&t=1465141330757&track_os=ios&track_osversion=9.3.2&track_device=tablet&track_uid=&track_appversion=4.3.4&auth=
2) Considerare la stringa che va dall'inizio dell'URL sopracitato fino al parametro &auth, quindi precisamente:
Codice:iflipit.mondadorieducation.it/sync/getEditorNotes.php?srd=&srnm=&iss=TVM1MDQ1MV8yMDE1&t=1465141330757&track_os=ios&track_osversion=9.3.2&track_device=tablet&track_uid=&track_appversion=4.3.4
3) Infine, calcolare l'hash dell'URL risultante, mediante la funzione "MondadoriHelpers.generate_HMAC_SHA1".
È giusto il procedimento?
resultString = resultString.substring(7, url.lastIndexOf('&'));
Dato che si tratta di un hash a 40 caratteri, immagino si tratti di SHA-1. Ho provato a calcolare l'hash SHA-1 del link che hai postato in questo esempio, ma non corrisponde all'hash. Sei sicuro funzioni così?Codice:http://iflipit.mondadorieducation.it/sync/getEditorNotes.php?srd=&srnm=&iss=TVM1MDQ1MV8yMDE1&t=1465141330757&track_os=ios&track_osversion=9.3.2&track_device=tablet&track_uid=&track_appversion=4.3.4&auth=d95e6a3d094397da13f9f8b272163f67b1cc9053
E in caso che il suffisso http:// sia già stato tolto? Il tuo metodo sarebbe valido a patto che l'utente dell'@OP ci informi che http:// sarà sempre presente nella stringa. Se era già tolto avresti tagliato parte di un parametro.Sapendo che il protocollo è http, è sufficiente:
Senza bisogno di replace().Java:resultString = resultString.substring(7, url.lastIndexOf('&'));
Forse non sono stato abbastanza chiaro.
Non mi interessa l'implementazione in Java, quella c'è già nel sorgente. Mi interessa calcolare (non scrivetemi il codice in Java, che non mi interessa, voglio soltanto sapere che cosa fa) il parametro 'auth' in seguito ad una modifica dell'URL. Ripeto, da quanto ho potuto capire, il server di destinazione, per prevenire qualsiasi modifica arbitraria dei parametri dell'URL, ha introdotto questo parametro 'auth' che non è altro che un hash di controllo. Come questo hash sia generato è scritto nel codice, che, essendo Java, capisco poco o nulla. Per quanto riguarda la funzione generate_HMAC_SHA1, fondamentale per risolvere questa questione, questo è il sorgente dell'intero script.
Se è solo un controllo allora prova a criptare direttamente la parte senza &auth=hash e dopo gli passi l'hash al parametro auth quando esegui la richiesta http.Forse non sono stato abbastanza chiaro.
Non mi interessa l'implementazione in Java, quella c'è già nel sorgente. Mi interessa calcolare (non scrivetemi il codice in Java, che non mi interessa, voglio soltanto sapere che cosa fa) il parametro 'auth' in seguito ad una modifica dell'URL. Ripeto, da quanto ho potuto capire, il server di destinazione, per prevenire qualsiasi modifica arbitraria dei parametri dell'URL, ha introdotto questo parametro 'auth' che non è altro che un hash di controllo. Come questo hash sia generato è scritto nel codice, che, essendo Java, capisco poco o nulla. Per quanto riguarda la funzione generate_HMAC_SHA1, fondamentale per risolvere questa questione, questo è il sorgente dell'intero script.
Se è solo un controllo allora prova a criptare direttamente la parte senza &auth=hash e dopo gli passi l'hash al parametro auth quando esegui la richiesta http.
public static String generate_HMAC_SHA1(String daFirmare, String secretKey) throws InvalidKeyException, NoSuchAlgorithmException {
return binary2ASCIIHex(calcSHA1MAC(Base64.decode(secretKey, 0), daFirmare));
}
private static byte[] calcSHA1MAC(byte[] abyte0, String s) throws NoSuchAlgorithmException, InvalidKeyException {
byte[] abyte1 = null;
SecretKeySpec secretkeyspec = new SecretKeySpec(abyte0, "DES");
Mac mac = Mac.getInstance("HmacSHA1");
mac.init(secretkeyspec);
return mac.doFinal(s.getBytes());
}
private static String binary2ASCIIHex(byte[] a) {
StringBuffer buf = new StringBuffer(a.length * 2);
for (int cx = 0; cx < a.length; cx++) {
int ln = a[cx] & 15;
buf.append("0123456789abcdef".charAt((a[cx] & 255) / 16));
buf.append("0123456789abcdef".charAt(ln));
}
return buf.toString();
}
public static String sha1Hash(String toHash) {
String hash = null;
try {
MessageDigest digest = MessageDigest.getInstance("SHA-1");
digest.update(toHash.getBytes(), 0, toHash.length());
hash = new BigInteger(1, digest.digest()).toString(16);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return hash;
}
public static String generate_HMAC_SHA1(String daFirmare, String secretKey) throws InvalidKeyException, NoSuchAlgorithmException {
return binary2ASCIIHex(calcSHA1MAC(Base64.decode(secretKey, 0), daFirmare));
}
private static byte[] calcSHA1MAC(byte[] abyte0, String s) throws NoSuchAlgorithmException, InvalidKeyException {
byte[] abyte1 = null;
SecretKeySpec secretkeyspec = new SecretKeySpec(abyte0, "DES");
Mac mac = Mac.getInstance("HmacSHA1");
mac.init(secretkeyspec);
return mac.doFinal(s.getBytes());
}
Ho detto prova. Non è detto che il sito lo accetti di sicuro. Comunque la funzione che mi hai citato in precedenza da utilizzare per criptarlo è generate_HMAC_SHA1(), il codice completo è quello che mi hai citato tu adesso. L'algoritmo è sha1.Ottimo, ci siamo! Ora non ci resta che capire come avviene la criptazione.
Ok, adesso implementa tutto tu stesso e se c'è qualcosa che non va riporta quali sono i tuoi problemi.Sí, la funzione di hashing viene chiamata nel sorgente principale (link). È proprio qui che si può osservare quale sia la "parte dell'URL" che sarà il primo argomento della funzione di hashing generate_HMAC_SHA1. Il secondo argomento invece, è la chiave privata, che penso sia una delle due stringhe:
og8WGTtmeFaZ7eNVH4EC9ueTwNx3KSKzenio9ePe2G2yHHi8NIsxmMAlsnHZiYPD
23e490b2f4daa327cc11b27e955d6573
Riassumimi qual'è il problema ora che ci sono, vedo di darti una mano. Scusami se non ti ho risposto ma ho sbalzi alla connessione.Sí, la funzione di hashing viene chiamata nel sorgente principale (link). È proprio qui che si può osservare quale sia la "parte dell'URL" che sarà il primo argomento della funzione di hashing generate_HMAC_SHA1. Il secondo argomento invece, è la chiave privata, che penso sia una delle due stringhe:
og8WGTtmeFaZ7eNVH4EC9ueTwNx3KSKzenio9ePe2G2yHHi8NIsxmMAlsnHZiYPD
23e490b2f4daa327cc11b27e955d6573
Evitiamo ot, lui non ti deve riassumere niente, sei tu che devi leggere quello che non hai letto in questo thread per evitare doppi post di stessi/simili contenuti.Riassumimi qual'è il problema ora che ci sono, vedo di darti una mano. Scusami se non ti scrivo ma ho sbalzi alla connessione.
Non l'ho citata perché è ovvia (secondo te che farà mai? lol)@SpeedJack non hai citato la funzione binary2ASCIIHex().
Non c'entra se è ovvio o meno, si dovevano elencare tutte le funzioni da usare. (Non ho citato generate_HMAC_SHA1() perchè è ovvia, secondo te che farà mai?) x'D. L'importante è il contenuto.Non l'ho citata perché è ovvia (secondo te che farà mai? lol)
Il codice l'ho scritto. Lo snippet è sopra.@MadJack non vuol dire che se non sai il Java il codice te lo devono scrivere gli altri. Manca qualche funzione.