Аватар для KofeMNE
7 / 7 / 1
Регистрация: 27.08.2009
Сообщений: 99

RSA шифрование

17.03.2013, 09:58. Показов 33105. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений. . . .
21 мат мед. Планы на развитие модели здравоСохранения
anaschu 01.06.2026
AnyLogic: план развития симуляционной модели рабочего коллектива — динамический абсентеизм, реальные данные, три сценария сравнения Продолжаю серию постов о дискретно-событийной модели рабочего. . .
20. Мат мед. Абсентеизм как отдельный тип простоя
anaschu 29.05.2026
Апдейт модели: исправленные баги, абсентеизм и новые механизмы Продолжаю развивать ранее описанную модель рабочего коллектива на AnyLogic. За последние несколько дней был проведён серьёзный. . .
19. здоровье, усталость и психотип работника влияют на производительность предприятия, и наоборот, производительность на здоровье, усталось и психотип
anaschu 28.05.2026
Дискретно-событийная модель рабочего коллектива на AnyLogic: здоровье, выгорание, психотипы и микростимуляция Привет, коллеги. Хочу поделиться итогами нескольких недель работы над симуляционной. . .
"Прокси" для последовательного порта
Eddy_Em 28.05.2026
Эту штуку написал я достаточно давно. Но сейчас вот понадобилось настроить датчик грозы, но при этом не отключать его от "метеодемона". Соответственно, надо запустить этот "прокси": метеодемон будет. . .
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
Модель здравосохранения 18. Чем здоровее работник, тем быстрее выгорает
anaschu 24.05.2026
Имитационная модель корпоративного здравоохранения: что показывает математика Сегодня в модели рабочего коллектива на AnyLogic появились три новые механики — выгорание через накопленную усталость,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru