Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/172: Рейтинг темы: голосов - 172, средняя оценка - 4.62
47 / 47 / 6
Регистрация: 09.11.2010
Сообщений: 308

Алгоритм шифрования RSA

10.05.2011, 04:12. Показов 34526. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Необходимо реализовать программу, которая по заданному паролю шифрует данные и дешифрует оные вышеуказанным алгоритмом.
Вот мой код для шифрования:
C#
1
2
3
4
5
6
7
8
PasswordDeriveBytes key = new PasswordDeriveBytes( dataPassword, Encoding.ASCII.GetBytes( "alexander" ) );
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider( 384 );
rsa.FromXmlString( rsaInitString );
RSAParameters rsaParameters = new RSAParameters();
rsaParameters = rsa.ExportParameters( false );
rsaParameters.Modulus = key.GetBytes( 48 );
rsa.ImportParameters( rsaParameters );
data = rsa.Encrypt( data, false );
Вот мой код для дешифрации:
C#
1
2
3
4
5
6
7
8
PasswordDeriveBytes key = new PasswordDeriveBytes( dataPassword, Encoding.ASCII.GetBytes( "alexander" ) );
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider( 384 );
rsa.FromXmlString( rsaInitString );
RSAParameters rsaParameters = new RSAParameters();
rsaParameters = rsa.ExportParameters( false );
rsaParameters.Modulus = key.GetBytes( 48 );
rsa.ImportParameters( rsaParameters );
data = rsa.Decrypt( data, false );
dataPassword - переменная типа string, собственно пароль

rsaInitString - переменная типа string, полученная путём экспорта параметров из RSACryptoServiceProvider rsa = new RSACryptoServiceProvider( 384 ) и записанная в файл (т.е. при запуске программы, данная переменная считывается из файла)

data - переменная типа byte[], хранящая входные данные (шифруемые данные для шифрования и зашифрованные данные для дешифрации)

Шифрование проходит успешно. А при дешифрации выдаётся ошибка "Плохой ключ". Подскажите как избавиться от данной проблемы.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.05.2011, 04:12
Ответы с готовыми решениями:

алгоритм шифрования RSA, exception плохие данные
Здравствуйте. Столкнулся с проблемой при реализации алгоритма RSA. Класс RSACryptoServiceProvider позволяет зашифровать данные размером...

Реализация RSA шифрования
Саму реализацию взяла с MSDNusing System; using System.Security.Cryptography; using System.Text; class RSACSPSample { ...

Взаимодействие RSA шифрования между c# и php
Здравствуйте! Пытаюсь передавать данные от c# до php и обратно в зашифрованном виде, пока что-то не особо выходит. Вот на пример, тут...

13
I ♥ C#
 Аватар для Delog
470 / 262 / 25
Регистрация: 07.05.2010
Сообщений: 567
10.05.2011, 14:39
Шифровать надо приватным ключом, расшифровывать - публичным. У вас rsaInitString, возможно, один и тот же ключ, хотя из кода не понятно.
0
47 / 47 / 6
Регистрация: 09.11.2010
Сообщений: 308
10.05.2011, 17:06  [ТС]
Цитата Сообщение от Delog Посмотреть сообщение
У вас rsaInitString, возможно, один и тот же ключ, хотя из кода не понятно.
да, это один и тот же ключ
Цитата Сообщение от Delog Посмотреть сообщение
Шифровать надо приватным ключом, расшифровывать - публичным.
а как это будет выглядеть в коде?
0
I ♥ C#
 Аватар для Delog
470 / 262 / 25
Регистрация: 07.05.2010
Сообщений: 567
10.05.2011, 17:42
Извиняюсь, поторопился. Конечно же шифровать надо публичным, а не расшифровывать, иначе бы любой желающий мог расшифровать сообщение. Чуть позже напишу пример, сейчас нет возможности.
0
47 / 47 / 6
Регистрация: 09.11.2010
Сообщений: 308
10.05.2011, 17:45  [ТС]
спасибо, буду ждать
0
I ♥ C#
 Аватар для Delog
470 / 262 / 25
Регистрация: 07.05.2010
Сообщений: 567
11.05.2011, 15:34
Лучший ответ Сообщение было отмечено как решение

Решение

Сначала создаем публичный и приватный ключи:
C#
1
2
3
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
File.WriteAllText("public.xml", rsa.ToXmlString(false));
File.WriteAllText("private.xml",rsa.ToXmlString(true));
Естественно ключи должны быть парными, т.е. созданными от одного объекта rsa.

Теперь передаем публичный ключ своему другу, хоть через форум у всех на виду. Ваш друг этим ключом шифрует сообщение:
C#
1
2
3
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
rsa.FromXmlString(File.ReadAllText("public.xml"));
MySecret.Text = Convert.ToBase64String(rsa.Encrypt(Encoding.UTF8.GetBytes(MyMessage.Text), false));
Где MyMessage - это TextBox в котором ваш друг написал сообщение, а MySecrect - это TextBox в котором получится зашифрованное сообщение. Вообще шифрование происходит здесь: rsaCrypt.Encrypt, но поскольку этот метод возвращает зашифрованный массив байт, я, для наглядности, перевожу этот массив в текст Base64.

Вы получаете зашифрованное сообщение от друга и его сможет расшифровать только тот, кто имеет приватный ключ, парный публичному. Т.е. только вы:
C#
1
2
3
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
rsa.FromXmlString(File.ReadAllText("private.xml"));
HisMessage.Text = Encoding.UTF8.GetString(rsa.Decrypt(Convert.FromBase64String(HisSecret.Text), false));
Где HisSecret - это TextBox с зашифрованным сообщением от друга, а HisMessage - это TextBox c его сообщением в расшифрованном виде. Здесь, опять же, расшифровка только здесь: rsa.Decrypt, все остальное только для того, чтобы массив байтов представить в виде текста.
9
47 / 47 / 6
Регистрация: 09.11.2010
Сообщений: 308
11.05.2011, 16:25  [ТС]
мне нужно формировать ключ из пароля (текстовой строки)
как это правильно сделать?
я пытаюсь устанавливать значения rsaParameters.Modulus, rsaParameters.D и rsaParameters.Exponent то у меня появляется ошибка "Плохой ключ" даже при шифровании
0
I ♥ C#
 Аватар для Delog
470 / 262 / 25
Регистрация: 07.05.2010
Сообщений: 567
11.05.2011, 18:01
Цитата Сообщение от M__A__K Посмотреть сообщение
мне нужно формировать ключ из пароля (текстовой строки)
Воспользуйтесь симметричным алгоритмом шифрования. У RSA другие цели.
0
47 / 47 / 6
Регистрация: 09.11.2010
Сообщений: 308
11.05.2011, 21:38  [ТС]
Цитата Сообщение от Delog Посмотреть сообщение
Воспользуйтесь симметричным алгоритмом шифрования. У RSA другие цели
это лабораторная работа. симметричные алгоритмы я уже сделал.
у RSAParameters довольно много полей. меня интересует следующий вопрос:
какие из них возможно сформировать вручную, чтобы получить адекватный RSAParameters, которым можно зашифровать (а потом расшифровать) данные?
0
 Аватар для Mortal_Hero
8 / 8 / 2
Регистрация: 20.11.2010
Сообщений: 42
16.05.2011, 05:24
Лучший ответ Сообщение было отмечено как решение

Решение

Была у меня подобная лабораторная работа, только надо было использовать не стандартные функции - а писать их самому. Поэтому, не факт, что подойдёт, но всё же...
Для нормальной работы надо ввести p и q взаимно простые, я не делал проверку на их взаимно простоту, не до этого было.
Вложения
Тип файла: rar RSA.rar (54.0 Кб, 2392 просмотров)
7
47 / 47 / 6
Регистрация: 09.11.2010
Сообщений: 308
16.05.2011, 13:37  [ТС]
я решил делать файл вместо пароля, препод захавал
всем спасибо

Mortal_Hero, спс, я посмотрю
0
 Аватар для KofeMNE
7 / 7 / 1
Регистрация: 27.08.2009
Сообщений: 99
10.04.2012, 15:20
Ребят, а можете объяснить как реализовать обмен между клиентом и сервером? Т.е. аутентификацию по другому. Соединение между сокетами можно не объяснять, а просто как данные передаются в безопасном виде. Например я хочу передать свой пароль через RSA клиенту, чтобы посторонние личности об этом не узнали.
0
0 / 0 / 0
Регистрация: 27.10.2013
Сообщений: 5
21.12.2013, 15:06
Mortal_Hero, программа очень хороша, но возник такой вопрос... возможна работа только с латинскими буквами? при попытке шифровать русский текст выдает ошибку.(
0
1 / 1 / 0
Регистрация: 11.05.2014
Сообщений: 17
13.01.2015, 17:50
DariaSm, здесь демонстрируется как шифровать/дешифровать строки по алгоритму RSA
http://www.youtube.com/watch?v=UMLDeliY0ng
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.01.2015, 17:50
Помогаю со студенческими работами здесь

Алгоритм RSA
Кто чтото может сказать про алгоритм RSA? У ково есть сам алгоритм RSA? У ково есть хоть на какомто языке RSA? Пажалуста... Я вам...

RSA алгоритм
можете объяснить как правильно использовать сие алгоритм в C# с использование встроенных классов. если не сложно, объясните на примере...

Алгоритм слепой RSA подписи
Взял с википедии http://ru.wikipedia.org/wiki/%D1%EB%E5%EF%E0%FF_%EF%EE%E4%EF%E8%F1%FC Алиса выбирает случайным образом число из...

Ошибка деления на ноль. Алгоритм RSA
Есть в криптографии алгоритм RSA для получения ключей. Есть заготовка программы для реализации этого алгоритма. using System; using...

RSA алгоритм ошибка System.StackOverflowException
есть такой код, он для лаб. роб. немогу понять как решить проблему, в 12 стороке возникает System.StackOverflowException при вводе 1650....


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru