Da esadecimale a String in Java
Dopo un week-end di pausa riprendiamo con un argomento molto in voga: la conversione da valori esadecimali a String.
Nel mio caso mi è servito per il login in una wb application in JSP e Servlet.
Nel db sia utente e password sono cripati in SHA1.
Partiamo da questo metodo:
public User login(String name, String pwd) throws ClassNotFoundException, SQLException, NoSuchAlgorithmException, UnsupportedEncodingException {
User user = new User();
conn = DBManager.getInstance().takeConnection();
MessageDigest md = MessageDigest.getInstance("SHA1");
byte[] encodeName = md.digest(name.getBytes("UTF-8"));
byte[] encodePwd = md.digest(pwd.getBytes("UTF-8"));
String convName = ConvertHexToString.convert(encodeName);
String convPwd = ConvertHexToString.convert(encodePwd);
PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM user WHERE user_name = ? AND user_pass = ?");
pstmt.setString(1, convName);
pstmt.setString(2, convPwd);
ResultSet rs = pstmt.executeQuery();
if (rs.next()) {
user.setId(rs.getInt("user_id"));
user.setName(name);
user.setPwd(pwd);
rs.close();
pstmt.close();
} else {
user.setId(0);
user.setName("");
user.setPwd("");
rs.close();
pstmt.close();
}
return user;
}
Al metodo passo due String.
MessageDigest ci serve per fare l'hash delle due stringhe; il metodo digest() però richiede un array di byte, e quindi prima facciamo il passaggio da String a byte[] con getBytes().
Una volta fatto questo dobbiamo rifare la conversione dell'hash in formato String, in modo da passare gli hash al db.
E questo lo facciamo con una classe apposita che vi posto:
public class ConvertHexToString {
public static String convert(byte[] b) {
StringBuilder sb = new StringBuilder(b.length * 2);
for (int i = 0; i < b.length; i++) {
int v = b[i] & 0xff;
if (v < 16) {
sb.append('0');
}
sb.append(Integer.toHexString(v));
}
return sb.toString();
}
}
Questo metodo static svolge alcune opreazione sull'array di byte che gli passiamo.
Certo, per chi è abituato a farlo in PHP questo può risultare un processo più lungo, però non è una cosa complicata direi!
java messagedigest jsp servlet string
Commentami!