Close dialog on back button clicked

        dialog.setOnKeyListener(new DialogInterface.OnKeyListener() {
            @Override
            public boolean onKey(DialogInterface dlg, int keyCode, KeyEvent event) {
                if (keyCode == KeyEvent.KEYCODE_BACK) {
                    dialogOpen = false;
                    dlg.dismiss();
                    return true;
                }
                return false;
            }
        });

Android – Spannable example

Screenshot_20160613-152414

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Create spannable text and set style.
        Spannable text = new SpannableString("This is underline and bold text.");
        text.setSpan(new UnderlineSpan(), 8, 17, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        text.setSpan(new StyleSpan(Typeface.BOLD), 22, 26, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

        // Set spannable text in TextView.
        TextView textView = (TextView) findViewById(R.id.textview);
        textView.setText(text);
       
        Spannable text3 = new SpannableString("Italic green text in toast");
        text3.setSpan(new StyleSpan(Typeface.ITALIC), 0, 18,  Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        text3.setSpan(new ForegroundColorSpan(Color.GREEN), 0, 18,  Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        Toast.makeText(this, text3, Toast.LENGTH_LONG).show();

    }
}

Facebook CTF solution: capture_Uzbekistan

Пароли с клавиатуры
Нам известно, какие клавиши нажимал пользователь, а также известен md5-хэш от пароля. Пожалуйста, узнайте пароль.
Hash: d377e0079ee9e94fc69336a01630b041

keyboard_64585ad62a1e6bb9fd58f5a444ad4e0a

English translation:
Password from keyboard
We know what button was clicked. Also, we know md5 hash for password. Please, find a password.
Hash: d377e0079ee9e94fc69336a01630b041

Solution:

public class HashTask {

    public static void main(String[] args) {

        String keys = "49uodgm";//this letters are used in password
        String hash = "d377e0079ee9e94fc69336a01630b041";//md5 for that password
        int max_length = 10;//find combination till this length
       
        System.out.println("START");

        // password length minimum - keys length
        for (int l = keys.length(); l < max_length; l++) {
           
            String number_format = "%0" + l + "d";//we will use numbers to find combination
            boolean doBreak = false;//this is used to break for loop
           
            // interate all numbers withing length
            for (int i = 0; i < ((int) Math.pow(10, l)); i++) {

                // add leading zeros if needed for example 123->0000123
                String num = String.format(number_format, i);

                boolean doContinue = false;
                // exclude all numbers which contains not appropriate digits
                // for example for length - 7, not appropriate numbers are 8, 9
                for (int j = keys.length(); j < 10; j++) {
                    if (num.contains(String.valueOf(j))) {
                        doContinue = true;
                        break;
                    }
                }
                if (doContinue) continue;//go to next number
               
                // let's create password combination
                StringBuilder sb = new StringBuilder();
                for(char c: num.toCharArray()){
                    int pos = Integer.parseInt(String.valueOf(c));
                    sb.append(keys.charAt(pos));
                }
                String combination = sb.toString();
               
                // let's make sure that combination contains all letters user entered
                for(char c: keys.toCharArray()){
                    if(!combination.contains(String.valueOf(c))){
                        doContinue = true;
                        break;
                    }
                }
                if(doContinue) continue;//if some of letters miss, exclude this number
               
                // check for combination md5 equality
                String md5 = MD5.md5(combination);
                if(md5.equals(hash)){
                    System.out.println(combination);
                    doBreak = true;
                    break;
                }
            }
           
            if(doBreak) break;// if found stop for loop
           
        }
       
        System.out.println("END");

    }

}

MD5.java

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class MD5 {
   
    public static void main(String[] args) {
        System.out.println(md5("bcab"));
    }

    // method 1
    public static String md5(String password){

        byte[] bytes = getBytes(password);

        // convert the byte to hex format method 1
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < bytes.length; i++) {
            sb.append(Integer.toString((bytes[i] & 0xff) + 0x100, 16).substring(1));
        }
       
        return sb.toString();
       
    }

   
   
    private static byte[] getBytes(String password) {
        MessageDigest md = null;
        try {
            md = MessageDigest.getInstance("MD5");
        } catch (NoSuchAlgorithmException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        md.update(password.getBytes());
        byte byteData[] = md.digest();
        return byteData;
    }
   
    // method 2
        public static String md5b(String password){
           
            byte[] bytes = getBytes(password);

            StringBuffer hexString = new StringBuffer();
            for (int i = 0; i < bytes.length; i++) {
                String hex = Integer.toHexString(0xff & bytes[i]);
                if (hex.length() == 1)
                    hexString.append('0');
                hexString.append(hex);
            }

            return hexString.toString();
           
        }

}

Answer: god94mug

Java – How to generate MD5 hash from String

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class Main {

    public static void main(String[] args) {
       
        System.out.println(md5a("password"));//5f4dcc3b5aa765d61d8327deb882cf99
        System.out.println(md5b("password"));//5f4dcc3b5aa765d61d8327deb882cf99
       
    }
   
    // method 1
    private static String md5a(String password){

        byte[] bytes = getBytes(password);

        // convert the byte to hex format method 1
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < bytes.length; i++) {
            sb.append(Integer.toString((bytes[i] & 0xff) + 0x100, 16).substring(1));
        }
       
        return sb.toString();
       
    }

    // method 2
    private static String md5b(String password){
       
        byte[] bytes = getBytes(password);

        StringBuffer hexString = new StringBuffer();
        for (int i = 0; i < bytes.length; i++) {
            String hex = Integer.toHexString(0xff & bytes[i]);
            if (hex.length() == 1)
                hexString.append('0');
            hexString.append(hex);
        }

        return hexString.toString();
       
    }
   
    private static byte[] getBytes(String password) {
        MessageDigest md = null;
        try {
            md = MessageDigest.getInstance("MD5");
        } catch (NoSuchAlgorithmException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        md.update(password.getBytes());
        byte byteData[] = md.digest();
        return byteData;
    }

}