Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.69/174: Рейтинг темы: голосов - 174, средняя оценка - 4.69
 Аватар для KofeMNE
7 / 7 / 1
Регистрация: 27.08.2009
Сообщений: 99

RSA шифрование

17.03.2013, 09:58. Показов 33030. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Нашел реализацию RSA для Java в интернете. Немного переделал класс, добавив getters и setters, а так же перенес инструкции из конструктора в метод init.

Вот класс реализации RSA шифрования:

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
public class RSA {
    private final static BigInteger one      = new BigInteger("1");
    private final static SecureRandom random = new SecureRandom();
 
    private BigInteger privateKey;
    private BigInteger publicKey;
    private BigInteger modulus;
 
    public void init(int N) {
        BigInteger p = BigInteger.probablePrime(N/2, random);
        BigInteger q = BigInteger.probablePrime(N/2, random);
        BigInteger phi = (p.subtract(one)).multiply(q.subtract(one));
 
        modulus    = p.multiply(q);                                  
        
        privateKey = publicKey.modInverse(phi);
    }
    
    public void setPrivateKey(BigInteger privateKey) {
        this.privateKey = privateKey;
    }
    
    public void setPublicKey(BigInteger publicKey) {
        this.publicKey = publicKey;
    }
    
    public void setModulus(BigInteger modulus) {
        this.modulus = modulus;
    }
    
    public BigInteger getPrivateKey() {
        return privateKey;
    }
    
    public BigInteger getPublicKey() {
        return publicKey;
    }
    
    public BigInteger getModulus() {
        return modulus;
    }
    
    // generate an N-bit (roughly) public and private key
    RSA() {
        publicKey  = new BigInteger("65537");     // common value in practice = 2^16 + 1
    }
 
    BigInteger encrypt(BigInteger message) {
        return message.modPow(publicKey, modulus);
    }
 
    BigInteger decrypt(BigInteger encrypted) {
        return encrypted.modPow(privateKey, modulus);
    }
 
    public String toString() {
        String s = "";
        s += "public  = " + publicKey  + "\n";
        s += "private = " + privateKey + "\n";
        s += "modulus = " + modulus;
          
        return s;
    }
}
Я решил его использовать в целях создания цифровой подписи. Подскажите пожалуйста правильно ли я делаю действия, и нет ли уязвимости в моем коде для создания цифровой подписи между клиентом и сервером.

На сервере делаю следующие действия:
Java
1
2
3
4
5
6
int N = 1024; //количество бит для генерации RSA ключей
RSA rsa = new RSA();
 
rsa.init(N);
 
//Далее отправляем результаты методов rsa.getPublicKey() и rsa.getModulus() на клиент
После этих действий, генерируется private и public ключ на сервере, а также modulus. Как я понял, нам нужно отправить modulus и public ключ на клиент, чтобы тот смог зашифровать секретное сообщение и отправить зашифрованную информацию обратно серверу.
На клиенте делаю следующие действия:
Java
1
2
3
4
5
6
7
8
9
10
11
12
//создаем сообщение в BigInteger формате (которое и будем посылать)
BigInteger message = new BigInteger("Привет Мир! I love you!".getBytes());
 
RSA rsa = new RSA();
 
rsa.setModulus(modulus); //используем modulus, который получили от сервера
rsa.setPublicKey(publicKey); //используем publicKey, который получили от сервера
 
//далее, зашифровываем секретное сообщение, чтобы послать серверу
BigInteger encryptMessage = rsa.encrypt(message);
 
//после всех действий, посылаем encryptMessage на сервер
На сервере делаю следующие действия:
Java
1
2
3
4
BigInteger decryptMessage = rsa.decrypt(encryptMessage);
 
/* Выводим наш результат на экран */
System.out.println( new String(decryptMessage().getBytes()) );
Мы приняли наше зашифрованное сообщение от клиента и дешифруем его с помощью private ключа.
Все, по идее мы получили секретное сообщение от клиента к серверу.

Хотелось бы узнать, нет ли уязвимости в данном алгоритме? И нужно ли посылать modulus? Может я что-то не так понял?

Добавлено через 5 минут
Ведь в документации ничего не упоминается про modulus, поэтому у меня такие подозрения
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.03.2013, 09:58
Ответы с готовыми решениями:

RSA шифрование
Всем привет. Можете пожалуйста скинуть ссылку, где нормальная реализация RSA шифрования на java. Я искал, но находил всягую дичь. Нужно...

Ошибка Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 at pr4.RSA.main(RSA.java:44)
package pr4; import java.math.BigInteger; import java.security.SecureRandom; public class RSA { private final...

Шифрование RSA в Java
Доброго времени суток, господа! Проблема такая: дали задание сделать программу шифрования RSA в Java, я эту программу вижу второй раз в...

20
0 / 0 / 0
Регистрация: 08.05.2017
Сообщений: 2
08.05.2017, 16:12
Студворк — интернет-сервис помощи студентам
Полностью рабочий код. Можете поможет вам: https://bitbucket.org/Marthmarth123/rsadecrypt.

Там встроенная кириллица, и по желанию можно и менять алфавит.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.05.2017, 16:12
Помогаю со студенческими работами здесь

Java rsa шифрование
Доброе времени суток. Подскажите пожалуйста примеры программ где используется технология шифрования данных по средствам технологии rsa (...

RSA в JAVA
RSA я реализовал шифровку текста в RSA в Java. Но при попытке зашифровать большой текст вылетает это: Exception in thread...

алгоритм RSA
Доброго времени суток! Пишу реализацию алгоритма RSA, появилась проблема с большими числами, т.к. нужно возводить в большую степень, но с...

Доработка кода с rsa
Добрый день, нашел на просторах интернета такой код. Сделать ввод текста для шифровки у меня получилось, но есть вопрос как расшифровывать...

RSA и кодировка в JAVA
Добрый вечер. Сам являюсь новичком. По образцу со страницы http://javadigest.wordpress.com/2012/08/26/rsa-encryption-example/ из...


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

Или воспользуйтесь поиском по форуму:
21
Ответ Создать тему
Новые блоги и статьи
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значения справочника
Maks 21.03.2026
Процедура ВодителиНачалоВыбора(Элемент, ДанныеВыбора, ВыборДобавлением, СтандартнаяОбработка) / / Отключаем стандартную обработку (стандартное открытие формы выбора без фильтров) . . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru