Форум программистов, компьютерный форум, киберфорум
Java: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 03.11.2015
Сообщений: 6

Зашифровать базу данных. Корректно считать BLOB для дешифрации

08.07.2016, 11:03. Показов 1441. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.

Есть небольшая программа, которая из локальной базы данных (sqlite) по запросу выдает нужную информацию. Приводить её код думаю смысла нет, обычный запрос в БД, я использую библиотеку sqlite-jdbc-3.8.11.2

Т.к. программу вместе с базой данных планирую передавать пользователю, хотел бы немного перестраховаться и зашифровать информацию в базе данных, пока идея такая:
Зашифрованные значения в БД - запрос программы - получаем зашифрованные данные - с помощью встроенного ключа дешефруем

для шифрования данных(текст) я подумал можно использовать такую программу, но не знаю как правильно вытащить ее из бд:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
public class Data2DB {
 
    public static void main(String[] args) {
          try {
 
                 String text = "test";
                 String key = "keykeykeykeykeyk"; // 128 bit key
 
                 // Создаю ключ, шифр
                 Key aesKey = new SecretKeySpec(key.getBytes(), "AES");
                 Cipher cipher = Cipher.getInstance("AES");
 
                 // кодирую текст
                 cipher.init(Cipher.ENCRYPT_MODE, aesKey);
                 byte[] encrypted = cipher.doFinal(text.getBytes("UTF-8"));
                 System.err.println(new String(encrypted));
 
 
              
            Connection c = null;
            Statement stmt = null;
            
              Class.forName("org.sqlite.JDBC");
              c = DriverManager.getConnection("jdbc:sqlite:2.db");
              c.setAutoCommit(false);
              System.out.println("Opened database successfully");
 
              stmt = c.createStatement();
              
                    String sql = "INSERT INTO LAI (LAI, NOCRYPT) " +
                            "VALUES ('"+encrypted+"', '"+text+"')";
                    stmt.executeUpdate(sql);
                System.out.println("Records LAI successfully");
 
                  ResultSet rs = stmt.executeQuery( "SELECT * FROM LAI;" );
                    
                  while ( rs.next() ) {
                         int rwid = rs.getRow();
                         String  name = rs.getString("NOCRYPT");
 
//Незашифрованный текст удается прочитать и вывести на экран:
                         System.out.println("ID: "+rwid +" = "+ name);
 
//Как прочитать из ДБ зашифрованный текст и дешифровать его, я не знаю, пробую так:                         
                         String lai = rs.getString("LAI");
                         byte[] b = lai.getBytes();
                         
                         cipher.init(Cipher.DECRYPT_MODE, aesKey);
                         String decrypted = new String(cipher.doFinal(b));
                         
                         System.err.println("DECRYPT DB: "+rwid+"  "+decrypted);
 
                            
                            
                  }
 
              stmt.close();
              c.commit();
              c.close();
            } catch ( Exception e ) {
              System.err.println( e.getClass().getName() + ": " + e.getMessage() );
              System.exit(0);
            
            }
          }
    
}
Вывод программы такой:

A2`©1†A’ъkЮC*Ђ
Opened database successfully
Records LAI successfully
ID: 1 = 000
javax.crypto.IllegalBlockSizeException: Input length must be multiple of 16 when decrypting with padded cipher

Подскажите как корректно считать и отправить на дешифровку зашифрованное поле из БД.
Таблица создавалась с корректными типами данных для ячеек:

Java
1
2
3
          String sql = "CREATE TABLE LAI " +
                       "(LAI                BLOB     NOT NULL, " +
                       "NOCRYPT          TEXT   NUT NULL)";
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.07.2016, 11:03
Ответы с готовыми решениями:

Зашифровать базу данных
Всем привет ..работаю сисадмином. И вот тут дела такие. Начали меня кидать зарплатой..каждый раз давая обещания доплатить в следующем...

Не записываются данные в Базу Данных на LAMP (Linux) | Хранение файлов в БД, Blob
Всем привет. Подскажите пожалуйста. Не получается записать данные в базу данных на локальный сервер в Линуксе mint (Установил LAMP - linux,...

Считать содержимое BLOB поля из базы данных SQlite, используя API функций С/С++
Добрый день, необходимо корректно считать содержимое BLOB поля в программу и как-то удостовериться, что содержимое поля считано правильно. ...

3
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
08.07.2016, 12:27
stopwar, а что помешает тому кто захочет, посмотреть ключ в вашей программе и дешифровать все данные?
0
0 / 0 / 0
Регистрация: 03.11.2015
Сообщений: 6
08.07.2016, 13:56  [ТС]
KEKCoGEN,
планирую использовать обфускатор proguard
или
реализую запрос ключа при использовании программы
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
08.07.2016, 14:41
stopwar, вот тут разбирается шифрование данных в БД
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.07.2016, 14:41
Помогаю со студенческими работами здесь

Datasnap Провайдеры DbEXpress - картинки (Blob поле) не пишутся в физическую базу данных
Дорогие друзья, форумчане, уважаемые люди. Прошу помочь разобраться - не пишутся картинки в физическую базу данных. Есть 3-х звенка...

не корректно выводит базу данных в делфи
есть программа вроде и селект запросы правильные но вот при работе с делфи почему то косяки на 1 картинке при нажатии кнопки при выводе...

Как заставить корректно вводить данные в базу данных
Было дано задание, создать программу, которая будет создавать строчку в базе данных, и заполнять поля в ней. Все данные выбирает...

Как изменить базу данных по умолчанию или исползовать свою базу данных для администрирование
Привет всем! Создаю новый проект на asp.net но при администрирование проекта visual studio 2012 создает собственную базу по умолчание в...

Записи. Считать из файла базу данных. Найти самого старшего человека из Москвы
В базе данных 14 человек. ФИО/Дата рождения/Город/Номер телефона 1) Вывести данные в виде таблицы. 2) Найти и вывести на экран имя и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru