Шифровать и дешифровать строку в java [требует правки]

341
14 июня 2017, 01:05

Здравствуйте! Есть потребность сохранять пароль на устройстве. Как выполнить шифрование - дешифрование в java (Android).

Answer 1

Метод #1: Custom

Хеш содержит 128 бит (16 байт) поэтому мы в строке 17 указали 16 байтов, в строке 19 было указанно 32 так как обычно хеш 16 байтов представляется как последовательность из 32 шестнадцатеричных цифр.

public static String md5Custom(String st) {
    MessageDigest messageDigest = null;
    byte[] digest = new byte[0];
    try {
        messageDigest = MessageDigest.getInstance("MD5");
        messageDigest.reset();
        messageDigest.update(st.getBytes());
        digest = messageDigest.digest();
    } catch (NoSuchAlgorithmException e) {
        // тут можно обработать ошибку
        // возникает она если в передаваемый алгоритм в getInstance(,,,) не существует
        e.printStackTrace();
    }
    BigInteger bigInt = new BigInteger(1, digest);
    String md5Hex = bigInt.toString(16);
    while( md5Hex.length() < 32 ){
        md5Hex = "0" + md5Hex;
    }
    return md5Hex;
}

Метод #2: Apache Common Codec

Этот метод заключается в использовании готовой реализации MD5. Для того чтобы использовать реализацию Apache Common Codec нужно подключить его к проекту. Если использовать Maven то нужно подключить к вашему проекту зависимость:

<dependency>
    <groupId>commons-codec</groupId>
    <artifactId>commons-codec</artifactId>
    <version>1.9</version>
</dependency>
public static String md5Apache(String st) {
    String md5Hex = DigestUtils.md5Hex(st);
    return md5Hex;
}

На сервере храните hash пароля, а не сам пароль. При вводе пароля на сервере проверяются не пароли, а их hash.

Результат работы:

String st = "berezini";
Custom MD5:
4e9537d66d36c88c909d0de578b363b9
Apache MD5:
4e9537d66d36c88c909d0de578b363b9
READ ALSO
Что значит бинарная совместимость в Java?

Что значит бинарная совместимость в Java?

Что значит бинарная совместимость в Java?

284
JSON парсинг в Android

JSON парсинг в Android

Имеется код от https://restcountrieseu/rest/v2/all

279
Spring HATEOAS как получить HAL ?

Spring HATEOAS как получить HAL ?

Данные методы возвращают на клиент ответ с Content-type json , но мне нужен HAL или HAL + JSON

227
Проверка на наличие объекта в базе данных

Проверка на наличие объекта в базе данных

Как оптимальнее проверить при сохранении - есть ли уже объект в базе данных? Подойдет ли код:

226