Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> RSA на С++, зашифровать строку на RSA 
:(
    Опции темы
nerdy_weirdie
Дата 15.4.2008, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 16.1.2007

Репутация: нет
Всего: нет



Добрый день. Мне вот понадобилось шифрование на С++ сделать, раньше не приходилось, может кто знающий подскажет, а то весь день убил. Неясно куда приткнуть эту штуку "10001". Можно на WinApi, либо при помощи функций из OpenSSL.
Вот джава-скриптик, который надо переписать на C++:
var PublicKey = "87BC864F973F29EB0B2B1E7C54E1AED05228DFEB5B9C30FF34502E56DDCFE9......";
var RSA = new RSAKey();
RSA.setPublic(PublicKey, "10001");
var Res = RSA.encrypt( StringToEncrypt );

Заранее Спасибо

Это сообщение отредактировал(а) nerdy_weirdie - 15.4.2008, 17:56
PM MAIL   Вверх
Mihhail
Дата 15.4.2008, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 96
Регистрация: 13.9.2007

Репутация: 5
Всего: 9



nerdy_weirdie, Вот Здесь можно исходник небольшой по этому алгоритму скачать.


PM MAIL WWW   Вверх
nerdy_weirdie
Дата 16.4.2008, 03:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 16.1.2007

Репутация: нет
Всего: нет



Цитата(Mihhail @ 15.4.2008,  20:11)
nerdy_weirdie, Вот Здесь можно исходник небольшой по этому алгоритму скачать.

Спасибо за ответ! Вот посмотрел я этот исходник, и опять же неясно, куда приткнуть эту строку "10001". И вообще не понимаю, что она значит. Это вторая часть ключа? Справки по этому методу setPublic нигде не нашел. И все же лучше пример на проверенных библиотеках, как wincrypt, openssl.
PM MAIL   Вверх
just_geek
Дата 16.4.2008, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 309
Регистрация: 13.12.2007

Репутация: нет
Всего: 10



Код

#define KEYLENGTH  0x00800000
#define ENCRYPT_ALGORITHM CALG_RC4 
#define ENCRYPT_BLOCK_SIZE 8 

const LPTSTR pszPassword = L"my_secrey_key";

bool EncryptPassword(const QString &srcPassword, QString &dstPassword)
{
    bool result = false;
    HCRYPTPROV hCryptProv = NULL; 
    HCRYPTKEY hKey = NULL; 
    HCRYPTHASH hHash = NULL; 

    DWORD dwBlockLen; 
    DWORD dwBufferLen; 

    // Get the handle to the default provider. 
    if ( CryptAcquireContext (&hCryptProv, NULL, MS_ENHANCED_PROV, PROV_RSA_FULL, 0) ) {
        // Create a hash object. 
        if ( CryptCreateHash( hCryptProv, CALG_MD5, 0, 0, &hHash) ) {
            // Hash the password. 
            if( CryptHashData( hHash, (BYTE *)pszPassword, lstrlen(pszPassword), 0) ) {
                // Derive a session key from the hash object. 
                if( CryptDeriveKey( hCryptProv, ENCRYPT_ALGORITHM, hHash, KEYLENGTH, &hKey)) {
                    //---------------------------------------------------------------
                    // Determine the number of bytes to encrypt at a time. 
                    // This must be a multiple of ENCRYPT_BLOCK_SIZE.
                    // ENCRYPT_BLOCK_SIZE is set by a #define statement.
                    dwBlockLen = 1000 - 1000 % ENCRYPT_BLOCK_SIZE; 

                    //---------------------------------------------------------------
                    // Determine the block size. If a block cipher is used, 
                    // it must have room for an extra block. 
                    if(ENCRYPT_BLOCK_SIZE > 1) 
                        dwBufferLen = dwBlockLen + ENCRYPT_BLOCK_SIZE; 
                    else 
                        dwBufferLen = dwBlockLen; 

                    QByteArray qbdata = srcPassword.toAscii();
                    DWORD size = (DWORD)qbdata.size();
                    if(CryptEncrypt( hKey, NULL, TRUE, 0, (BYTE*)qbdata.data(), &size, dwBufferLen)) {
                        dstPassword = qbdata;
                        result = true;
                    }
                }
            }
        }
    }

    // Release the hash object. 
    if(hHash) 
    {
        if(!(CryptDestroyHash(hHash)))
        {
        }

        hHash = NULL;
    }

    // Release the session key. 
    if(hKey)
    {
        if(!(CryptDestroyKey(hKey)))
        {
        }
    }

    // Release the provider handle. 
    if(hCryptProv)
    {
        if(!(CryptReleaseContext(hCryptProv, 0)))
        {
        }
    }

    return result;
}

ну вот переделанный пример из мсдн (там файлы шифровались), вырезал отсюда обработку ошибок, чтоб поменьше было )

Это сообщение отредактировал(а) just_geek - 16.4.2008, 11:00
PM MAIL   Вверх
xvr
Дата 16.4.2008, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



Цитата(nerdy_weirdie @ 15.4.2008,  17:53)
Добрый день. Мне вот понадобилось шифрование на С++ сделать, раньше не приходилось, может кто знающий подскажет, а то весь день убил. Неясно куда приткнуть эту штуку "10001". 

Судя по всему это public экспонента (в упомянутом nerdy_weirdie исходнике это e), и вместе с тем, что называется PublicKey они и составляют реальный Public Key для RSA. Куда ее притыкать - дело темное, Crypto API в Win работает только с ключем целиком, причем они не раскрывают подробностей, как этот ключ сделать из составляющих частей  smile 

PM MAIL   Вверх
nerdy_weirdie
Дата 16.4.2008, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 16.1.2007

Репутация: нет
Всего: нет



Цитата(xvr @ 16.4.2008,  12:06)
Цитата(nerdy_weirdie @ 15.4.2008,  17:53)
Добрый день. Мне вот понадобилось шифрование на С++ сделать, раньше не приходилось, может кто знающий подскажет, а то весь день убил. Неясно куда приткнуть эту штуку "10001". 

Судя по всему это public экспонента (в упомянутом nerdy_weirdie исходнике это e), и вместе с тем, что называется PublicKey они и составляют реальный Public Key для RSA. Куда ее притыкать - дело темное, Crypto API в Win работает только с ключем целиком, причем они не раскрывают подробностей, как этот ключ сделать из составляющих частей  smile

 smile  О майн гот.. мрачняк.. мне как раз таки надо в точности повторить приведенное в первом посте джаваскриптовое шифрование, именно с этой экспонентой.. может, какие другие библиотеки есть?
PM MAIL   Вверх
xvr
Дата 16.4.2008, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



Цитата(nerdy_weirdie @ 16.4.2008,  13:37)
Цитата(xvr @ 16.4.2008,  12:06)
Цитата(nerdy_weirdie @ 15.4.2008,  17:53)
Добрый день. Мне вот понадобилось шифрование на С++ сделать, раньше не приходилось, может кто знающий подскажет, а то весь день убил. Неясно куда приткнуть эту штуку "10001". 

Судя по всему это public экспонента (в упомянутом nerdy_weirdie исходнике это e), и вместе с тем, что называется PublicKey они и составляют реальный Public Key для RSA. Куда ее притыкать - дело темное, Crypto API в Win работает только с ключем целиком, причем они не раскрывают подробностей, как этот ключ сделать из составляющих частей  smile

 smile  О майн гот.. мрачняк.. мне как раз таки надо в точности повторить приведенное в первом посте джаваскриптовое шифрование, именно с этой экспонентой.. может, какие другие библиотеки есть?

Есть, RASEURO например.

PM MAIL   Вверх
nerdy_weirdie
Дата 16.4.2008, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 16.1.2007

Репутация: нет
Всего: нет



Вот интересно бы узнать, что это за зверь такой new RSAKey();
COM-объект какой-то или что... и откуда он на веб страничке в джаваскрипте взялся..
PM MAIL   Вверх
jonie
Дата 17.4.2008, 08:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 7
Всего: 118



а у меня такого нету... но вообще говоря это должен быть ActiveX компонент...


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0503 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.