Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    Salvare hash in una String

    Salve, utilizzando l'algoritmo di hashing SHA-256 ottengo l'impronta di una stringa. Questo digest come da specifiche è un array di 32 byte. Dovendo salvare il digest in un db vorrei convertirlo in String. Quindi faccio:

    String s = new String(digest, "UTF8");

    Così facendo però ottengo una stringa del tipo:

    ?]??/]k0?p????/M?$?i37??P

    evidentemente non tutti i caratteri possibili in utf8 sono stampabili e quindi perdo informazione. Mi riferisco ai "" (sul forum si vede così, sul mio eclipse si vede come un quadrato) e ai "?". Come posso salvare quel byte[] in una Stringa senza perder informazioni?

  2. #2
    Perchè non usi un campo blob in modo da salvare direttamente i bytes?

    Se vuoi invece salvare la stringa puoi convertirla nella sua rappresentazione esadecimale.

    codice:
     /**
         * Convert a byte[] array to readable string format. This makes the "hex"
        readable!
         * @return result String buffer in String format 
         * @param in byte[] buffer to convert to string format
         */
        String byteArrayToHexString(byte in[])
        {
    
            byte ch = 0x00;
    
            int i = 0;
    
            if (in == null || in.length <= 0)
            {
                return null;
            }
    
    
    
            String pseudo[] = {"0", "1", "2",
                               "3", "4", "5", "6", "7", "8",
                               "9", "A", "B", "C", "D", "E",
                               "F"
            };
    
            StringBuffer out = new StringBuffer(in.length * 2);
    
    
    
            while (i < in.length)
            {
    
                ch = (byte) (in[i] & 0xF0); // Strip off high nibble
    
                ch = (byte) (ch >>> 4);
                // shift the bits down
    
                ch = (byte) (ch & 0x0F);
    // must do this is high order bit is on!
    
                out.append(pseudo[(int) ch]); // convert the nibble to a String Character
    
                ch = (byte) (in[i] & 0x0F); // Strip off low nibble 
    
                out.append(pseudo[(int) ch]); // convert the nibble to a String Character
    
                i++;
    
            }
    
            String rslt = new String(out);
    
            return rslt;
    
        }
        // </editor-fold>

  3. #3
    Putroppo ho giusto un varchar da 32 caratteri e non posso farci nulla.

  4. #4
    Se non puoi cambiare tipo e dimensione della colonna potresti mi viene in mente la seguente "porcheria":

    Usa più record per la stessa entry e ricostruisci a livello applicativo l'hash concatenando i valore dei diversi record.
    Per raggruppare i record usa una qualche convenzione..

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