На нашем сайте мы используем cookie для сбора информации технического характера и обрабатываем IP-адрес вашего местоположения. Продолжая использовать этот сайт, вы даете согласие на использование файлов cookies. Здесь вы можете узнать, как мы пользуемся файлами cookies.
Я согласен
логотип upread.ru

Заказ Стрибог на Java


Недавно был потенциальный интересный заказ по программе на Java. Несмотря на хроническую нехватку времени, я бы его с удовольствием взял. Но заказчик куда-то пропал после моего ответа. Опять же, несмотря на это, я немного вник в проект и поиграл с хэшированием.

Итак, если вкратце, то суть задачи такова. Необходим не навороченный, обычный менеджер паролей. Форма 1: Открыть базу данных или создать новую. Форма 2: (Работа с базой данных) добавить, изменить, удалить объекты бд, содержащие адрес сайта, логин, пароль, комментарий + генерация паролей. Базу данных необходимо сохранять в отдельный файл и защитить, используя шифрование. Самое главное - необходимо шифрование не AES 256, а с использованием алгоритма ГОСТ Р 34.11-2012 "Стрибог".

Схема решения такой курсовой довольно проста. Берем какую-нибудь СУБД; в данном случае лучше проще, SQLite, к примеру. Подключаем её к какой-нибудь IDE, к NetBeans, опять же, к примеру. Далее создаем подключения, создаем файл базы, таблицы, зависимости.

Можно для отладки использовать DB Browser for SQLite – очень удобно формировать первоначально структуру, потом этим будет заниматься наша программа, но первоначально наглядно проще дб браузер.

В общем, это все понятно, несложно. Трудоемко, да. Даже если не вручную создавать формы, обработчики и тд – все равно уйдет немало времени, но в принципе все это чисто технические сложности и ничего для меня интересного нет. А вот шифрование заинтересовало.

Начнем с того, что здесь, видимо, не совсем корректно сформулирована задача. Во-первых, Стрибог – это алгоритм хэширования, а не шифрования. Иными словами, зашифрованное с помощью такого алгоритма не расшифровать. Использоваться он в данном случае может как «скрыватель» паролей, например.

То есть заносить в базу данных не пароль, а его «стрибогский» хэш. Зачем же, спросите вы, тогда заносить, если мы извлечь не сможем? А нам и не надо: просто будем сравнивать затем для входа хэш введенного и хранящегося в базе данных пароля.

На само деле это довольно распространенная практика. Очень часто для данных целей используют, к примеру, MD5 или SHA-224. В высокоуровневых языках программирования данные функции хэширования уже реализованы, так что работа с ними очень проста. Почитать об этом можно здесь.

Но вот для алгоритма ГОСТ Р 34.11-2012 "Стрибог" такой встроенной библиотеки ни в C#, ни в Java нет. А у нас есть. Пример использования (основной класс демо-программы):

import java.security.*;
import java.util.logging.*;

public class Striborg {

private static final String[] hashNames = {"Stribog256", "Stribog512"};
private static final String[] LongHashNames = {"Stribog256", "Stribog512"};

public static void main(String[] argv) throws NoSuchAlgorithmException, NoSuchProviderException {
static  String str = "upread.ru";
      byte[] message;        
        try {
            message = str.getBytes();
             System.out.println(str);
        } catch (Exception ex) {
            Logger.getLogger(Striborg.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        if (Security.getProvider("JStribog") == null) {
            Security.addProvider(new StribogProvider());
        }        
        for (String hashName : hashNames) {
            MessageDigest md = MessageDigest.getInstance(hashName);
            byte[] digest = md.digest(message);
            printHex(digest);
        }
        
     String str2 = "upread.ru - блог читающего программиста";
     byte[] message2 = str2.getBytes();
        for (String hashName : LongHashNames) {
            MessageDigest md = MessageDigest.getInstance(hashName);
            byte[] digest = md.digest(reverse(message2));
            printHex(digest);
        }
              
    }

    private static void printHex(byte[] digest) {
        for (byte b : digest) {
            int iv = (int) b & 0xFF;
            if (iv < 0x10) {
                System.out.print('0');
            }
            System.out.print(Integer.toHexString(iv).toUpperCase());
        }
        System.out.println();
    }   
}
Массив LongHashNames нужен, если необходимо хэшировать длинные строки или большие потоки данных.

Остальных классов (Stribog256.java, Stribog512.java и т.д.) тут нет. Если вам требуется помощь по программированию, то вы всегда можете связаться со мной по любым контактам. За небольшую плату я вам с удовольствием помогу.






тегизаметки, java, хэширование

Читайте также:




Отправка POST-запроса на C# и получение ответа от сервера
Мизофония: определение, причины, способы борьбы


© upread.ru 2013-2019
При перепечатке активная ссылка на сайт обязательна.
Задать вопрос
письмо
Здравствуйте! Вы можете задать мне любой вопрос. Если не получается отправить сообщение через эту форму, то пишите на почу up777up@yandex.ru
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.