Visualizzazione dei risultati da 1 a 10 su 16

Visualizzazione discussione

  1. #6
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Il "minimo" per fare la cosa corretta e un pochino pulita (ma si potrebbe fare ancora meglio!) può essere questo, scritto e provato al volo:

    codice:
    public class DigestUtils {
        private DigestUtils() {}
    
        public static String md5Hex(String str) throws NoSuchAlgorithmException {
            MessageDigest md = MessageDigest.getInstance("MD5");
            byte[] digest = md.digest(utf8Bytes(str));
            BigInteger number = new BigInteger(1, digest);
            return String.format("%032x", number);
        }
    
        private static byte[] utf8Bytes(String str) {
            try {
                return str.getBytes("UTF-8");
            } catch (UnsupportedEncodingException e) {
                throw new Error("Grave error, UTF-8 not supported!");
            }
        }
    }
    Cosa significa “%032x”?
    Cosa significa “1”?
    Perché semplicemente non “BigInteger(digest)”?
    Si converte tutto in Byte perché digest() vuole così, giusto?
    Farei questa modifica:
    codice:
    package web1;
    
    import java.io.UnsupportedEncodingException;
    import java.math.BigInteger;
    import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;
    
    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, String HashFunction) throws NoSuchAlgorithmException {
            MessageDigest md = MessageDigest.getInstance(HashFunction);
            byte[] digest = md.digest(utf8Bytes(Password));
            BigInteger number = new BigInteger(1, digest);
            return String.format("%032x", number);
        }
    
        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 {
                if(this.PreCode.equals("")){
                    // Vecchie versioni di Tomcat
    String HF = "MD5";
                    HashText = hashConvert(this.Code, HF);
                    return HashText;
                }else{
                    // Nuove versioni di Tomcat
    String HF = "SHA3-512";
                    HashText = hashConvert(combineString(hashConvert(this.Code,HF), hashConvert(this.PreCode,HF)),HF);
                    return HashText;
                }
            } catch (Exception e){
                throw new RuntimeException(e);
            }
        }
    
    }
    Per fare una cosa bella bisognerebbe che lo script calcolasse in automatico il sistema di conversione più evoluto del container ed usasse quello ma non saprei come fare (su IntelliJ ho java 1.10, sul server non posso saperlo). Tu sei in grado?
    Ultima modifica di giannino1995; 08-08-2018 a 19:07
    Più pratica in futuro...

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 © 2026 vBulletin Solutions, Inc. All rights reserved.