Come raschiare una string in Android?

Sto lavorando su un'applicazione Android e ho un paio di stringhe che vorrei codificare prima di submit a un database. Mi piacerebbe qualcosa che sia sicuro, facile da implementare, genera la stessa cosa each volta che è passato lo stesso dato, e preferibilmente si tradurrà in una string che rimane una lunghezza costante, non import quanto la string viene passata. Forse sto cercando un hash.

  • Android: Come gestire l'applicazione viene minimizzata dal button HOME
  • WebRTC su Android
  • Sincronizzare / aggiornare i database sqlite
  • Ordinamento di un Recyclerview
  • Android: disabilitare l'evidenziazione in listView fare clic
  • Ascolto onClick di Action Bar per il button Home
  • Android Google e lo stile del button di login
  • Xamarin Studio Android - Imansible creare HelloWorld con piattaforma più grande e più grande
  • Domanda su runOnUiThread
  • Android: istanze di attività multiple avviate con lo stesso intento. Portare uno in modo esclusivo in primo piano?
  • ORMLITE support SQL EXISTS?
  • Come faccio adb tirare tutti i file di una cartella presente in SD Card
  • 12 Solutions collect form web for “Come raschiare una string in Android?”

    Questo snippet calcola md5 per each string specificata

    public String md5(String s) { try { // Create MD5 Hash MessageDigest digest = java.security.MessageDigest.getInstance("MD5"); digest.update(s.getBytes()); byte messageDigest[] = digest.digest(); // Create Hex String StringBuffer hexString = new StringBuffer(); for (int i=0; i<messageDigest.length; i++) hexString.append(Integer.toHexString(0xFF & messageDigest[i])); return hexString.toString(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return ""; } 

    Fonte: http://www.androidsnippets.com/snippets/52/index.html

    Spero che questo sia utile per te

    Quella function sopra da ( http://www.androidsnippets.org/snippets/52/index.html ) è errata. Se una delle cifre nel messaggioDigest non è un valore esadecimale di due caratteri (ad esempio 0x09), non funziona correttamente perché non si blocca con 0. Se si cerca in giro troverai quella function e le lamentele su di esso non funziona. Qui una cosa migliore trovata nella sezione commenti di questa pagina , che ho leggermente modificato:

     public static String md5(String s) { MessageDigest digest; try { digest = MessageDigest.getInstance("MD5"); digest.update(s.getBytes(Charset.forName("US-ASCII")),0,s.length()); byte[] magnitude = digest.digest(); BigInteger bi = new BigInteger(1, magnitude); String hash = String.format("%0" + (magnitude.length << 1) + "x", bi); return hash; } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return ""; } 

    non metodo di lavoro:

     public static String md5(String s) { try { // Create MD5 Hash MessageDigest digest = java.security.MessageDigest .getInstance("MD5"); digest.update(s.getBytes()); byte messageDigest[] = digest.digest(); // Create Hex String StringBuffer hexString = new StringBuffer(); for (int i = 0; i < messageDigest.length; i++) hexString.append(Integer.toHexString(0xFF & messageDigest[i])); return hexString.toString(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return ""; } 

    risultato – 1865e62e7129927f6e4cd9bff104f0 (lunghezza 30)

    metodo di lavoro:

     public static final String md5(final String toEncrypt) { try { final MessageDigest digest = MessageDigest.getInstance("md5"); digest.update(toEncrypt.getBytes()); final byte[] bytes = digest.digest(); final StringBuilder sb = new StringBuilder(); for (int i = 0; i < bytes.length; i++) { sb.append(String.format("%02X", bytes[i])); } return sb.toString().toLowerCase(); } catch (Exception exc) { return ""; // Impossibru! } } 

    risultato – 1865e62e7129927f6e4c0d9bff1004f0 (lunghezza 32)

     private static char[] hextable = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; public static String byteArrayToHex(byte[] arrays) { String s = ""; for (int i = 0; i < arrays.length; ++i) { int di = (arrays[i] + 256) & 0xFF; // Make it unsigned s = s + hextable[(di >> 4) & 0xF] + hextable[di & 0xF]; } return s; } public static String digest(String s, String algorithm) { MessageDigest m = null; try { m = MessageDigest.getInstance(algorithm); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); return s; } m.update(s.getBytes(), 0, s.length()); return byteArrayToHex(m.digest()); } public static String md5(String s) { return digest(s, "MD5"); } 

    La risposta di cui sopra è quasi il 100% corretto. Manca con unicode.

      MessageDigest digest; try { digest = MessageDigest.getInstance("MD5"); byte utf8_bytes[] = tag_xml.getBytes(); digest.update(utf8_bytes,0,utf8_bytes.length); hash = new BigInteger(1, digest.digest()).toString(16); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } 

    Hai bisogno della lunghezza dall'allineamento byte non la string.

    Con la soluzione @Donut, con caratteri codificati UTF-8 (ad es .: é) devi usare getBytes("UTF-8") . Ecco la mia correzione del metodo digest:

     private static char[] hextable = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; public static String byteArrayToHex(byte[] arrays) { String s = ""; for (int i = 0; i < arrays.length; ++i) { int di = (arrays[i] + 256) & 0xFF; // Make it unsigned s = s + hextable[(di >> 4) & 0xF] + hextable[di & 0xF]; } return s; } public static String digest(String s, String algorithm) { MessageDigest m = null; try { m = MessageDigest.getInstance(algorithm); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); return s; } try { m.update(s.getBytes("UTF-8")); } catch (UnsupportedEncodingException e) { e.printStackTrace(); m.update(s.getBytes()); } return byteArrayToHex(m.digest()); } public static String md5(String s) { return digest(s, "MD5"); } 

    Soluzione di Donut in una singola function:

     private static char[] hextable = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; private static String md5(String s) { MessageDigest digest; try { digest = MessageDigest.getInstance("MD5"); digest.update(s.getBytes(), 0, s.length()); byte[] bytes = digest.digest(); String hash = ""; for (int i = 0; i < bytes.length; ++i) { int di = (bytes[i] + 256) & 0xFF; hash = hash + hextable[(di >> 4) & 0xF] + hextable[di & 0xF]; } return hash; } catch (NoSuchAlgorithmException e) { } return ""; } 
     MessageDigest md = MessageDigest.getInstance("MD5"); md.update('yourstring'); byte[] digest = md.digest(); StringBuffer sb = new StringBuffer(); for (byte b : digest) { sb.append(String.format("%02x", (0xFF & b))); } 

    È tardi per l'autore, ma prima di questo, ottengo Integer.toHexString(0xff&b) , che strappa i primi 0 dalla string esadecimale. Mi fa fatica a lungo. Spero utile per alcuni ragazzi.

    Le seguenti sono state funzionate per me su Android senza troncare l'infront di 0:

     MessageDigest md = null; String digest = null; try { md = MessageDigest.getInstance("MD5"); byte[] hash = md.digest(myStringToEncode.getBytes("UTF-8")); //converting byte arrays to Hexadecimal String StringBuilder sb = new StringBuilder(2*hash.length); for(byte b : hash){ sb.append(String.format("%02x", b&0xff)); } digest = sb.toString(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return digest; 

    se si utilizza guava:

     public String generateMd5(String input) { HashFunction hf = Hashing.md5(); Hasher hasher = hf.newHasher(); HashCode hc = hasher.putString(input, StandardCharsets.UTF_8).hash(); return hc.toString(); } 

    Se non aveste dei vincoli di sicurezza e volevi solo convertire String in un int unico. Lo scrivo perché quello che ho cercato e arrivato qui.

     String my_key int my_key.hashCode() 

    se si dispone di fino a 10 caratteri sarà anche unico. Vedi anche https://stackoverflow.com/a/17583653/1984636

    Questo non manca di '0'

      public static String md5(String string) { if (TextUtils.isEmpty(string)) { return ""; } MessageDigest md5 = null; try { md5 = MessageDigest.getInstance("MD5"); byte[] bytes = md5.digest(string.getBytes()); String result = ""; for (byte b : bytes) { String temp = Integer.toHexString(b & 0xff); if (temp.length() == 1) { temp = "0" + temp; } result += temp; } return result; } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return ""; } 
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.