Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 16 su 16

Discussione: Creare una classe disponibile in una Servlet

  1. #11
    Quote Originariamente inviata da giannino1995 Visualizza il messaggio
    Sempre Grazie, Ho trovato la pagina: https://docs.oracle.com/javase/6/doc...Formatter.html %: è il simbolo che precede il codice usato per la formattazione delle stringhe; 0: riempie il numero con degli zeri iniziali se le cifre del numero sono inferiori a 32;
    32: il numero deve essere formato da 32 cifre;
    x: x minuscola indica che il numero da convertire in stringa è un numero in base 16;
    (un numero in base 16 è formato dalle cifre 0-9 più le lettere a-f oppure dalle relative maiuscole A-F)
    Esatto. La documentazione di java.util.Formatter sulla formattazione delle stringhe è lunga e complessa. Te lo dico subito: non la devi certo "studiare" tutta subito né "a memoria" (non serve!). Basta consultarla sovente, comunque ogni qualvolta serve. Poi man mano i casi più comuni li impari ...

    Quote Originariamente inviata da giannino1995 Visualizza il messaggio
    Non mi è chiaro cosa accade se il numero è più lungo di 32 cifre: vengono prese le prime 32 lettere, le ultime oppure viene lanciata un’eccezione?
    La documentazione su questo è chiara:

    %[argument_index$][flags][width][.precision]conversion
    ......

    The optional width is a positive decimal integer indicating the minimum number of characters to be written to the output.

    Non viene troncato un bel niente. Se ci sono più caratteri, quelli sono (quindi "sfora" rispetto a quanto avresti previsto).

    Quote Originariamente inviata da giannino1995 Visualizza il messaggio
    Se uso “SHA3-512” la stringa di formattazione sarebbe “%0128x”, giusto?
    512 bit sono 64 byte, 1 byte sono 2 cifre hex. Quindi appunto 128 cifre hex.

    Quote Originariamente inviata da giannino1995 Visualizza il messaggio
    Non c’è una tabella su internet che per ogni hash definisce la relativa stringa da inserire in format?
    Probabilmente esiste anche. Ma non serve per quello ... basta che ragioni come ho fatto poco fa!

    Quote Originariamente inviata da giannino1995 Visualizza il messaggio
    Devo però prestare attenzione a quando vado online perché posso rischiare di avere un’applicazione che non funziona e non scoprirne le ragioni. Vorrei usare SHA3-512 ma dovrei aggiungere al codice un avviso che informa l’utente sul sistema di conversione disponibile sul container.
    Non c'entra il "online", non c'entra Tomcat o altro. C'entra il runtime Java usato. Nel framework standard di JavaSE (Standard Edition) esiste un provider della security chiamato "SUN" (da quando c'era Sun Microsystems a gestire Java) e in questo provider gli algoritmi SHA3-224, SHA3-256, SHA3-384 e SHA3-512 sono stati introdotti SOLO con il JDK/JRE 9. Non ci sono in versioni prima.
    Quindi li dovresti cercare in altri provider di altre librerie esterne (ammesso ce ne sia qualcuno che li supporta).
    Punto.

    Quote Originariamente inviata da giannino1995 Visualizza il messaggio
    Esiste una pagina sul web che definisce gli hash compatibili con i diversi server Tomcat.
    Non c'entra Tomcat!

    Quote Originariamente inviata da giannino1995 Visualizza il messaggio
    Una nota a margine: il container e Tomcat sono la stessa cosa?
    Tomcat è un servlet container. Non è un application server JavaEE "completo" (come invece JBoss).
    Andrea, www.andbin.net – Senior Java developer – SCJP 5 (91%) – SCWCD 5 (94%)

  2. #12
    Sempre grazie.
    E se importassi l'hash con maven?
    Guarda cosa ho trovato:
    https://mvnrepository.com/artifact/o...npm/sha3/1.2.0
    Cosa devo scrivere nella classe per sfruttare la libreria che ho importato in web.xml?
    ciao
    Più pratica in futuro...

  3. #13
    Quote Originariamente inviata da giannino1995 Visualizza il messaggio
    E se importassi l'hash con maven?
    Che vuol dire!?
    Maven serve per gestire le dipendenze e il build di un progetto (tipicamente Java ma può essere anche di altro tipo).

    Quote Originariamente inviata da giannino1995 Visualizza il messaggio
    Non c'entra niente con Java. C'entra con Node.js (tutta altra cosa). Bastava che guardavi l'home page su github del progetto.

    Quote Originariamente inviata da giannino1995 Visualizza il messaggio
    Cosa devo scrivere nella classe per sfruttare la libreria che ho importato in web.xml?
    Il web.xml comunque non c'entra proprio niente (web.xml è il "descrittore" delle webapp JavaEE).


    Allora, ascolta. Vuoi usare SHA3-512 (poi mi spieghi che ti serve un hash a 512 bit di una password?).
    Puoi usare un JDK/JRE 9 (o superiore) ?
    Sì ---> ok, nessun problema in quanto SHA3-512 è integrato.
    No ---> se vuoi continuare ad usare MessageDigest devi trovare una libreria che sia un "provider" della security che possa quindi essere "pluggata" all'interno del framework nel modo appropriato. Se invece trovassi una libreria che offre un metodo di utilità per gli hash che non ha a che fare con la MessageDigest del framework, sarebbe un altro discorso.

    La BouncyCastle è una nota libreria per crittografia e security che è un "provider" per la API della security di JavaSE. Offre dei servizi di hashing ma non so dire ora quali esattamente. I vari SHA3-xxx "credo" non li supporti.
    Andrea, www.andbin.net – Senior Java developer – SCJP 5 (91%) – SCWCD 5 (94%)

  4. #14
    Ho trovato un'altra dipendenza:
    https://mvnrepository.com/artifact/o...v-jdk15on/1.54
    codice:
    <!-- https://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk15on -->
      <dependency>
          <groupId>org.bouncycastle</groupId>
          <artifactId>bcprov-jdk15on</artifactId>
          <version>1.54</version>
      </dependency>
    Se edito in questo modo la classe posso dimenticarmi la disponibilità del JDK opportuno sul server?
    codice:
      package web1;
      import java.io.UnsupportedEncodingException;
      import java.security.NoSuchAlgorithmException;
      import org.bouncycastle.jcajce.provider.digest.SHA3;
      import org.bouncycastle.util.encoders.Hex;
      public class FromStringToHash {
          private String Code;
          private String PreCode;
          private String HashText;
          public void FromStringToHash(String Code, String PreCode){
              this.Code = Code;
              this.PreCode = PreCode;
          }
          public void FromStringToHash(String Code){
              this.Code = Code;
              this.PreCode = "";
          }
          public static String hashConvert(String Password) throws NoSuchAlgorithmException {
              SHA3.DigestSHA3 digestSHA3 = new SHA3.Digest512();
              byte[] digest = digestSHA3.digest(utf8Bytes(Password));
              return Hex.toHexString(digest);
          }
          private static byte[] utf8Bytes(String str) {
              try {
                  return str.getBytes("UTF-8");
              } catch (UnsupportedEncodingException e) {
                  throw new Error("Errore grave, UTF-8 non supportato!");
              }
          }
          public String combineString(String a, String b) {
              try {
                  StringBuilder sb = new StringBuilder("");
                  sb.append(a);
                  sb.append(b);
                  return sb.toString();
              }catch(Exception e){
                  throw new RuntimeException(e);
              }
          }
          public String getHashText() {
              try {
                  HashText = hashConvert(combineString(hashConvert(this.Code), hashConvert(this.PreCode)));
                  return HashText;
              } catch (Exception e){
                  throw new RuntimeException(e);
              }
          }
      }
    Più pratica in futuro...

  5. #15
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Che vuol dire!?
    Maven serve per gestire le dipendenze e il build di un progetto (tipicamente Java ma può essere anche di altro tipo).


    Non c'entra niente con Java. C'entra con Node.js (tutta altra cosa). Bastava che guardavi l'home page su github del progetto.


    Il web.xml comunque non c'entra proprio niente (web.xml è il "descrittore" delle webapp JavaEE).


    Allora, ascolta. Vuoi usare SHA3-512 (poi mi spieghi che ti serve un hash a 512 bit di una password?).
    Puoi usare un JDK/JRE 9 (o superiore) ?
    Sì ---> ok, nessun problema in quanto SHA3-512 è integrato.
    No ---> se vuoi continuare ad usare MessageDigest devi trovare una libreria che sia un "provider" della security che possa quindi essere "pluggata" all'interno del framework nel modo appropriato. Se invece trovassi una libreria che offre un metodo di utilità per gli hash che non ha a che fare con la MessageDigest del framework, sarebbe un altro discorso.

    La BouncyCastle è una nota libreria per crittografia e security che è un "provider" per la API della security di JavaSE. Offre dei servizi di hashing ma non so dire ora quali esattamente. I vari SHA3-xxx "credo" non li supporti.
    Ho postato senza aggiornare il browser. Quando scrivi ""provider" per la API" indenti dire che lo script che calcola l'SHA3-512 è presente sul server bouncycastle.org e non nella libreria importata nel progetto, giusto? In pratica se bouncycastle.org scomparisse dal web il mio script resterebbe privo dello strumento per calcolare l'SHA3-512 giusto?

    Ho scritto web.xml ma volevo scrivere pom.xml, scusami. In IntelliJ basta aggiungere al pom.xml i tag che ho scritto e l'IDE pensa a tutto il resto (scaricare il Jar, metterlo nella classe giusta, ecc...).

    Molti anni fa usavo l'MD5 in PHP oggi con Java mi piacerebbe prendere qualcosa di più aggiornato tutto qui.
    Più pratica in futuro...

  6. #16
    Quote Originariamente inviata da giannino1995 Visualizza il messaggio
    Quando scrivi ""provider" per la API" indenti dire che lo script che calcola l'SHA3-512 è presente sul server bouncycastle.org e non nella libreria importata nel progetto, giusto?
    No. La API della security di Java è fatta in un certo modo ben preciso e con una architettura che permette di "pluggare" (agganciare) altri provider esterni, oltre a quelli già forniti dalla piattaforma JavaSE.
    Vuol dire che un provider deve essere fatto in un certo modo ben specifico in modo da esporre i suoi servizi che possono quindi essere "scoperti" dalla API della security.

    Innanzitutto ha il concetto di "provider", è una classe che rappresenta un fornitore di servizi di crittografia/security. Poi un Provider può esporre N servizi, di hashing, encryption, secure random, signature, ecc...
    Non so se hai notato che le classi come MessageDigest, Signature e altre sono classi astratte (SecureRandom in effetti è concreta ma è perché può essere usata direttamente).
    Quando chiedi un servizio di MessageDigest, tu ottieni una sotto-classe di MessageDigest. Ma continui ad usare l'astrazione del framework (cioè appunto il tipo MessageDigest del framework) senza dover "sapere" quale è (dove sia, ecc..) la implementazione (che sarà fornita dal provider).
    Questo è il senso della API della security.

    Quote Originariamente inviata da giannino1995 Visualizza il messaggio
    In pratica se bouncycastle.org scomparisse dal web il mio script resterebbe privo dello strumento per calcolare l'SHA3-512 giusto?
    Dubito che scompaia così da un momento all'altro. Ma se dovesse mai succedere ed hai una macchina "pulita" in cui Maven dovesse scaricare da zero quel artifact ... ovviamente non lo troverebbe, se non esistesse su un repo (es. il Central Repository di Maven).

    Quote Originariamente inviata da giannino1995 Visualizza il messaggio
    Ho trovato un'altra dipendenza:
    https://mvnrepository.com/artifact/o...v-jdk15on/1.54
    codice:
    <!-- https://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk15on -->
      <dependency>
          <groupId>org.bouncycastle</groupId>
          <artifactId>bcprov-jdk15on</artifactId>
          <version>1.54</version>
      </dependency>
    L'ultima attuale della bcprov-jdk15on è la 1.60 ma va bene lo stesso.
    Ed ho verificato (sono rimasto colpito ..) in effetti supporta gli hash SHA3-xxx.

    Quote Originariamente inviata da giannino1995 Visualizza il messaggio
    Se edito in questo modo la classe posso dimenticarmi la disponibilità del JDK opportuno sul server?
    Sì. Però nel codice hai usato direttamente la classe SHA3 (una sua nested class, per la precisione) di BouncyCastle, togliendo quindi i benefici della API della security.
    Se BouncyCastle in una release successiva decidesse di cambiare il nome di queste classi o il package o il fatto che Digest512 sia una nested class di SHA3, tu DEVI cambiare il tuo codice. Se usi le astrazioni del framework (java.security.MessageDigest), no.
    Andrea, www.andbin.net – Senior Java developer – SCJP 5 (91%) – SCWCD 5 (94%)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2018 vBulletin Solutions, Inc. All rights reserved.