Da esadecimale a String in Java

Mattepuffo's logo
Da esadecimale a String in Java

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!


Condividi

Commentami!