PDA

Visualizza la versione completa : [JAVA] Codificare in Base64


pro_sid
30-12-2006, 14:09
Ciao a tutti, essesimo problema: io codifico le password con SHA-256 che, con le classi di Java MessageDigest che però come risultato mi sfornano un array di byte, a me invece serve una stringa che rappresenti la chiave in base 64.
Ho cercato delle classi per la conversione in base 64 ma ho trovato solo classi che convertono una stringa in un'altra stringa che rappresenta il numero in base 64, io invece devo elaborare l'array di byte in stringa rappresentante la base64.
Ho anche cercato un programmino esterno che codifichi delle stringhe e me le faccia vedere in base 64 (giusto per vedere il risultato, per vedere se quello che faccio è giusto) ma ho trovato solo prog che rendono stringhe in essadecimale.

Se qualcuno riesce ad essermi d'aiuto . . .
grazie in anticipo.

andbin
30-12-2006, 17:01
Originariamente inviato da pro_sid
Ciao a tutti, essesimo problema: io codifico le password con SHA-256 che, con le classi di Java MessageDigest che però come risultato mi sfornano un array di byte, a me invece serve una stringa che rappresenti la chiave in base 64.
Ho cercato delle classi per la conversione in base 64 ma ho trovato solo classi che convertono una stringa in un'altra stringa che rappresenta il numero in base 64, io invece devo elaborare l'array di byte in stringa rappresentante la base64.
Ho anche cercato un programmino esterno che codifichi delle stringhe e me le faccia vedere in base 64 (giusto per vedere il risultato, per vedere se quello che faccio è giusto) ma ho trovato solo prog che rendono stringhe in essadecimale.

Se qualcuno riesce ad essermi d'aiuto . . .
grazie in anticipo. Di classi per fare l'encode/decode in Base64 ne trovi sicuramente a quintali se fai una ricerca in rete. Io comunque posto la mia personale soluzione che, a meno di errori particolari, dovrebbe essere corretta.


public class Base64Code
{
private static char[] alphabet =
{
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f',
'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',
'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
'w', 'x', 'y', 'z', '0', '1', '2', '3',
'4', '5', '6', '7', '8', '9', '+', '/'
};

private static char padding = '=';

public static char[] encodeChar (byte[] data)
{
if (data == null)
throw new NullPointerException ("'data' parameter cannot be null");

int i = 0, j = 0, len = data.length, tmp;

char[] buf = new char[4*((len*8+23)/24)];

while (len > 0)
{
tmp = (data[i++] & 0xFF) << 16;
if (len >= 2)
tmp |= (data[i++] & 0xFF) << 8;
if (len >= 3)
tmp |= data[i++] & 0xFF;

buf[j++] = alphabet[tmp >>> 18];
buf[j++] = alphabet[tmp >>> 12 & 63];
buf[j++] = len >= 2 ? alphabet[tmp >>> 6 & 63] : padding;
buf[j++] = len >= 3 ? alphabet[tmp & 63] : padding;

len -= 3;
}

return buf;
}

public static String encodeString (byte[] data)
{
return new String (encodeChar (data));
}
}
Non ho fatto il decode ... semplicemente perché sono pigro. :fagiano:

Loading