Заказ Стрибог на 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, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
Читайте также:
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.