2012-04-06 1 views
2

J'utilise ormlite pour mon application Android. Mais maintenant j'ai un problème. J'ai un utilisateur de classe avec un mot de passe d'attribut. Je veux le crypter/décrypter. Mais je n'ai pas trouvé de solution, qui fonctionne avec ormlite. Quelqu'un a-t-il une idée? J'ai déjà trouvé que le cryptage n'est pas supporté par ormlite, mais par la recherche d'une autre solution, qui fonctionne avec ormlite.Cryptage/décryptage Android avec ormlite possible?

Est-il possible de surcharger les opérations den CRUD dans le Dao? (Je suis nouveau android, désolé si c'est une question stupide)

Merci pour l'aide

Répondre

4

Eh bien, vous ne préciserait pas un champ de mot de passe en texte clair pour être stocké dans la base de données, mais seulement stocker le mot de passe crypté (ou encore mieux seulement le hash de mot de passe, voir Best way to store password in database).

Vous auriez quelque chose comme

class User { 
    @DatabaseField(canBeNull = false) 
    private String passwordHash; 

    public void setPassword(String password) { 
     this.passwordHash = hashPassword(password); 
    } 

    public boolean isPasswordCorrect(String givenPassword) { 
     return TextUtils.equals(hasPassword(givenPassword), passwordHash); 
    } 

    private String hashPassword(String password) { 
     return AeSimpleSHA1.SHA1(password); 
    } 
} 

public class AeSimpleSHA1 { 

    private static String convertToHex(byte[] data) { 
     StringBuffer buf = new StringBuffer(); 
     for (int i = 0; i < data.length; i++) { 
      int halfbyte = (data[i] >>> 4) & 0x0F; 
      int two_halfs = 0; 
      do { 
       if ((0 <= halfbyte) && (halfbyte <= 9)) 
        buf.append((char) ('0' + halfbyte)); 
       else 
        buf.append((char) ('a' + (halfbyte - 10))); 
       halfbyte = data[i] & 0x0F; 
      } while(two_halfs++ < 1); 
     } 
     return buf.toString(); 
    } 

    public static String SHA1(String text) 
    throws NoSuchAlgorithmException, UnsupportedEncodingException { 
     MessageDigest md; 
     md = MessageDigest.getInstance("SHA-1"); 
     byte[] sha1hash = new byte[40]; 
     md.update(text.getBytes("iso-8859-1"), 0, text.length()); 
     sha1hash = md.digest(); 
     return convertToHex(sha1hash); 
    } 
} 

choses SHA1 sans vergogne copié à partir How to SHA1 hash a string in Android?.

+0

Merci, je vais essayer. – Flow

+0

Merci beaucoup, travaillé parfait – Flow

+0

Merci pour la solution parfaite. – JRomero