Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.08.2013, 13:37   #1
Bax77
 
Регистрация: 29.01.2013
Сообщений: 6
Сообщение Проблема с RSA шифрованием

Собственно в чем проблема,есть сайт,на котором нужно авторизоваться.Авторизация проходит в 2 этапа:
1.Получение публичного модуля и экспоненты RSA.
К примеру модуль выглядит так:
Код:
B181AC4F19BB0A81E041C81F79448D1CE729BB3DF75555186DF17762F035E6E403A2EA22B0BF1A471826C70EEA34CC9770445AEE75EE53B1DC3024FD1801AC9175E101B83A41719E8AF1DA392C19489D8D52DFD27A9D1D0E625085C111EF5FBDF8DAA677740CFFD26F551E5720FAC787EE0364C32280246AE6CDD6D4E97573AB4F85CDD2472A0EC89A860D79F40CD3C81CA59C3771809610F544DCC5C9687253F19CE8D8A574E2BCF42E3732336AF4F20C809583D96441A1DF7D134A3246BE265B05D7B855881AFAB6A9E4A15B92A12D765CDFC2117D07AF5F5FEBE8D778031B97A92ED8A341DD735E440A713C0EA157E19E6C068378C1F18FFA2A577C9024F7
Я так понимаю это HEX
А экспонента постоянная и выглядит так: 010001 (Это тоже вроде бы HEX)
2.Шифрование пароля с помощью 2 данных параметров,и кодировка результата в Base64.
Реализацию RSA на дельфи я нашел в библиотеке FGInt.
Вот как я её сделал
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
n,e:TFGInt;
SE,SM,M:string;
begin
s:='12345'; // Строка для шифровки
ConvertHexStringToBase256String('010001',SE);  // Конвертация HEX-строки(экспоненты) в Base256 строку
Base256StringToFGInt(SE,E);      // Конвертация Base256 строки в большое число FGInt(e)
ConvertHexStringToBase256String(M,SM); // Конвертация HEX-строки(модуля) в Base256 строку
Base256StringToFGInt(SM,N);   // Конвертация Base256 строки в большое число FGInt(n)
RSAEncrypt(s,e,n,s);      //Собственно сама шифровка RSA
ConvertBase256to64(s,s);  //Конвератция результата в Base64
// Ну и далее отправка пароля на сервер
end;
После всех этих действий,сервер отвечает,что пароль не верный.
Собственно хочу спросить,что не так я сделал.
Bax77 вне форума Ответить с цитированием
Старый 18.08.2013, 15:05   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Сайт с SSL использует целые сертификаты, а не ключи.
Цитата:
Я так понимаю это HEX
Нет, это информация зашифрованная алгоритмом RSA, вероятнее всего так и есть.

Цитата:
А экспонента постоянная и выглядит так: 010001 (Это тоже вроде бы HEX)
Обломчик. Это двоичный код. Разница между hexadecimal и binary очень велика.

Цитата:
Собственно хочу спросить,что не так я сделал.
Не знаю, и врятли кто-то кроме вас знает.

И откуда вы знаете что шифрование именно по такому алгоритму?

Последний раз редактировалось Человек_Борща; 18.08.2013 в 15:08.
Человек_Борща вне форума Ответить с цитированием
Старый 18.08.2013, 16:31   #3
kta87
Форумчанин
 
Аватар для kta87
 
Регистрация: 22.02.2010
Сообщений: 912
По умолчанию

Цитата:
010001 (Это тоже вроде бы HEX)
применительно к Object Pascal - это LongWord.
Константа, применительно к RSA и озвученной вами библиотеки, передается как тип string
Цитата:
Нет, это информация зашифрованная алгоритмом RSA, вероятнее всего так и есть.
Нет, алгоритм RSA - это асинхронный алгоритм, по этому шифрованный им участок так выглядеть не может.

Последний раз редактировалось kta87; 18.08.2013 в 16:34.
kta87 вне форума Ответить с цитированием
Старый 18.08.2013, 17:47   #4
Bax77
 
Регистрация: 29.01.2013
Сообщений: 6
По умолчанию

Я сделал вывод что это Hex величины(Модуль и экспонента),потому что,я видел реализацию шифрования пароля на C#,и где авторизация проходит успешно,вот кусок кода
Код:
        public static string EncryptPassword(string steam_rsa, string password, string modval, string expval)
        {
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
            RSAParameters rsaParams = new RSAParameters();
            rsaParams.Modulus = HexToByte(modval); // Modval,это и есть модуль,который я давал ранее
            rsaParams.Exponent = HexToByte(expval); //expval,та самая экспонента равная 010001
            rsa.ImportParameters(rsaParams);
            byte[] bytePassword = Encoding.ASCII.GetBytes(password);
            byte[] encodedPassword = rsa.Encrypt(bytePassword, false);
            string encryptedPass = Convert.ToBase64String(encodedPassword);

            return Uri.EscapeDataString(encryptedPass);
        }
Цитата:
И откуда вы знаете что шифрование именно по такому алгоритму?
Так как на сайте,есть скрипт rsa.js,и при авторизации выполняется данный скрипт,который возвращает пароль,зашифрованный в RSA
Bax77 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с RSA Romiras79 Общие вопросы Delphi 0 08.11.2012 17:06
Прроблемы с шифрованием Ker_33rus Общие вопросы C/C++ 9 21.11.2010 17:54
Помогите с Шифрованием на С++ Сергей Человек Общие вопросы C/C++ 0 29.11.2009 16:03
RSA SecurID проблема(( marselaz Безопасность, Шифрование 1 07.01.2009 11:42
Помогите пожалуйста с шифрованием! AnutkaSolnce Помощь студентам 5 19.05.2007 21:32