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

RSA шифрование

17.03.2013, 09:58. Показов 33234. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
Генератор паролей (вариант №2)
Maks 30.10.2026
Обновленная версия ранее созданной обработки. Добавлены следующие реквизиты типа Булево: - Буквы; - Цифры; - Символы. Изменена логика команды "Сгенерировать" и процедуры "ПриОткрытии":. . .
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей. Самым главным критерием для. . .
Установка ChatGPT (Codex) на Windows без использования Microsoft Store
Fabien159 28.10.2026
Здравствуйте всем читающим! Опишу процесс установки ChatGPT (Codex) на Windows, если по каким-то причинам у вас не получается устанавить его через Microsoft Store. И так: 1. Скачиваем с. . .
Программное добавление префикса в нумерацию документов
Maks 27.10.2026
Реализация из решения ниже выполнена в самописной конфигурации на БСП (помощь начинающему коллеге). Задача: Программно добавить префикс в нумерацию документов. Решение: В модуле объекта. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru