Вернуться   Биткоин Форум > Объявления
26 марта 2011, 6:24:07 AM   # 1
 
 
Сообщения: 1222
Цитировать по имени
цитировать ответ
по умолчанию Re: Код для преобразования любого ключа PGP (государственные и частные) в формате OpenSSL [60 BTC]

Взлом Биткоин адресов.
500 Биткоинов взломаны в "мозговом кошельке" с паролем "bitcoin is awesome"
Адрес кошелька: 14NWDXkQwcGN1Pd9fboL8npVynD5SfyJAE
Приватный ключ: 5J64pq77XjeacCezwmAr2V1s7snvvJkuAz8sENxw7xCkikceV6e
подробнее...


Всем кто хочет заработать Биткоины без вложений - рекомендую сайт http://bitcoin-zarabotat.ru
Я хочу простой вызов функции (ы), который будет принимать ключи PGP (государственных и частных) и конвертировать их в / из ключей OpenSSL и дать мне некоторую базовую информацию о ключе, как размер, алгоритм и т.д.

1. Free (BSD как лицензия)
2. C ++ или C

Легко интегрируется в существующие проекты с открытым исходным кодом.

Для получения более подробной информации поговорить с FellowTraveler
da2ce7 сейчас офлайн Пожаловаться на da2ce7   Ответить с цитированием Мультицитирование сообщения от da2ce7 Быстрый ответ на сообщение da2ce7


Как заработать Биткоины?
Без вложений. Не майнинг.


26 марта 2011, 8:24:57 AM   # 2
 
 
Сообщения: 1232
Цитировать по имени
цитировать ответ
по умолчанию Re: Код для преобразования любого ключа PGP (государственные и частные) в формате OpenSSL [60 BTC]

Получил 1806 Биткоинов
Реальная история.





Там нет на самом деле простой способ сделать это. Вы можете вызвать программу под названием gpgsm с помощью:

котировка
gpgsm -o секрет-GPG-key.p12 --export секретный ключ-p12 0xXXXXXXXX
OpenSSL PKCS12 -в агентурной GPG-key.p12 -nocerts отъезда GPG-key.pem
OpenSSL PKCS12 -в агентурной GPG-key.p12 -nokeys отъезда GPG-certs.pem

Если вы настаиваете, то вы должны смотреть на gpgsm исходный код, как это специально построенный инструмент для работы.

Последние 2 строки можно сделать в C ++ легко. Для того, чтобы загрузить RSA ключи вы можете сделать:
котировка
Статическая INT pass_cb (символ * ЬиЕ, внутр размер, внутр rwflag, пустота * и)
{
    Const строка пас = reinterpret_cast<символ *>(И);
    INT Len = pass.size ();
    // если слишком долго, усечение
    если (LEN > размер)
        Len = размер;
    pass.copy (BUF, длина);
    вернуться Len;
}
RSA * LoadPrivateKey (Const строка& PEM, Const строка& проходить)
{
    BIO_free (био);
    БИО * био = BIO_new_mem_buf (StringAsVoid (ул), -1);
    если (! био)
        бросить Ошибка чтения ();
    RSA * = PEM_read_bio_RSAPrivateKey пара ключей (био, NULL, pass_cb,
                                         StringAsVoid (проход));
    если (! пара ключей)
        бросить NoKeypairLoaded ();
    вернуться пара ключей;
}
Если это открытый ключ, то используйте вместо PEM_read_bio_PKCS7. Выше функция должна признать это PKCS.

Может быть, иногда вам нужен объект EVP:
котировка
класс EvpBox
{
общественности:
    EvpBox (RSA * Кейп);
    ~ EvpBox ();
    EVP_PKEY * Key ();
частный:
    EVP_PKEY * evpkey;
};

...

EvpBox :: EvpBox (RSA * Кейп)
{
    evpkey = EVP_PKEY_new ();
    если (! EVP_PKEY_set1_RSA (evpkey, Кейп)) {
        бросить Ошибка чтения ();
    }
}
EvpBox :: ~ EvpBox ()
{
    EVP_PKEY_free (evpkey);
}
EVP_PKEY * EvpBox :: Key ()
{
    вернуться evpkey;
}

1HmskBCwhnV8DRvYdpBmDyyTwGc28otPeZ
genjix сейчас офлайн Пожаловаться на genjix   Ответить с цитированием Мультицитирование сообщения от genjix Быстрый ответ на сообщение genjix

26 марта 2011, 1:33:27 PM   # 3
 
 
Сообщения: 1222
Цитировать по имени
цитировать ответ
по умолчанию Re: Код для преобразования любого ключа PGP (государственные и частные) в формате OpenSSL [60 BTC]

1HmskBCwhnV8DRvYdpBmDyyTwGc28otPeZ

Спасибо, испытает.
da2ce7 сейчас офлайн Пожаловаться на da2ce7   Ответить с цитированием Мультицитирование сообщения от da2ce7 Быстрый ответ на сообщение da2ce7

27 марта 2011, 7:54:00 AM   # 4
 
 
Сообщения: 1222
Цитировать по имени
цитировать ответ
по умолчанию Re: Код для преобразования любого ключа PGP (государственные и частные) в формате OpenSSL [60 BTC]

1HmskBCwhnV8DRvYdpBmDyyTwGc28otPeZ

Спасибо, испытает.

Я извиняюсь genjix, это, кажется, не работает, пожалуйста, вы можете направить меня, где я допустил ошибку.

http://pastebin.com/3pbC5e7N
da2ce7 сейчас офлайн Пожаловаться на da2ce7   Ответить с цитированием Мультицитирование сообщения от da2ce7 Быстрый ответ на сообщение da2ce7

27 марта 2011, 8:00:41 AM   # 5
 
 
Сообщения: 440
Цитировать по имени
цитировать ответ
по умолчанию Re: Код для преобразования любого ключа PGP (государственные и частные) в формате OpenSSL [60 BTC]

Pastebin говорит "открытый ключ" во всем его комментарии, но на самом деле то, что мы ищем здесь есть закрытый ключ. (Извините за путаницу.)

На самом деле, у меня уже есть код, производные открытый ключ, который вы можете увидеть между строками 246 - 612 в этом файле:
https://github.com/FellowTraveler/Open-Transactions/blob/master/OTLib/OTAsymmetricKey.cpp

Так что на самом деле я больше заинтересован в частном ключе, хотя лучшее решение (например, ваше предложение) будет поставлять обоих.

Я попробовал ваш код Кстати, увидеть ссылку Pastebin выше и, пожалуйста, помогите мне исправить это, спасибо.

-FT
fellowtraveler сейчас офлайн Пожаловаться на fellowtraveler   Ответить с цитированием Мультицитирование сообщения от fellowtraveler Быстрый ответ на сообщение fellowtraveler

27 марта 2011, 8:30:12 AM   # 6
 
 
Сообщения: 1232
Цитировать по имени
цитировать ответ
по умолчанию Re: Код для преобразования любого ключа PGP (государственные и частные) в формате OpenSSL [60 BTC]

EDIT: Вы действительно читали, что я написал выше? Перечитайте его.

Попробуй это:

Код:
#включают <строка>
#включают <исключение>
используя зЬй :: строку;

// ЬурейеЙ структура RSA;
#включают

Класс чтение: общественный станд :: исключение
{
общественности:
    виртуальный Const символ *, что () Const бросок ();
};

Класс NoKeypairLoaded: общественный станд :: исключение
{
общественности:
    виртуальный Const символ *, что () Const бросок ();
};

класс AccessCard
{
общественности:
    Карта доступа();
    ~ AccessCard ();
    аннулируются Сформировать ();
    аннулируются нагрузки (Const строки& PEM, Const строка& проходить);
    недействительным PublicKey (строка& PEM) Const;
    недействительным PrivateKey (строка& PEM, Const строка& ключевая фраза) сопзЬ;

частный:
    аннулированию CheckKey () сопзЬ;

    RSA * пара ключей;
};

класс Биобокс
{
общественности:
    структура буфера
    {
        пустота * ЬиЕ;
        INT размер;
    };

    Биобокс ();
    ~ Биобокс ();
    недействительным ConstructSink (Const строка& ул);
    аннулированию NewBuffer ();
    БИО * Био () Const;
    Буфер ReadAll ();
частный:
    BIO * био;
    Буфер ЬиЕ;
};

класс EvpBox
{
общественности:
    EvpBox (RSA * Кейп);
    ~ EvpBox ();
    EVP_PKEY * Key ();
частный:
    EVP_PKEY * evpkey;
};

// --------------------
#включают

Const символ * :: Ошибка чтения, что () Const бросок ()
{
    вернуть "Проблема чтения BIO.";
}
Const символ * NoKeypairLoaded ::, что () Const бросок ()
{
    вернуть "Нет пару ключей не загружены.";
}

AccessCard :: AccessCard ()
  : Пара ключей (NULL)
{
    если (EVP_get_cipherbyname ("AES-256-CBC") == NULL)
        OpenSSL_add_all_algorithms ();
}
AccessCard :: ~ AccessCard ()
{
    RSA_free (пара ключей);
}
аннулируются AccessCard :: CheckKey () Const
{
    если (! пара ключей)
        бросить NoKeypairLoaded ();
}

недействительный AccessCard :: Сформировать ()
{
    RSA_free (пара ключей);
    = RSA_generate_key пара ключей (2048, RSA_F4, NULL, NULL);
    Проверить ключ();
}

статический символ * LoseStringConst (Const строка& ул)
{
    вернуться const_cast<символ *>(Str.c_str ());
}
статическая сила * StringAsVoid (Const строка& ул)
{
    вернуться reinterpret_cast<недействительным *>(LoseStringConst (ул));
}

Биобокс :: Биобокс ()
 : Био (NULL)
{
    buf.buf = NULL;
    buf.size = 0;
}
Биобокс :: ~ Биобокс ()
{
    BIO_free (био);
    бесплатно (buf.buf);
}
аннулируется Биобокс :: ConstructSink (Const строки& ул)
{
    BIO_free (био);
    био = BIO_new_mem_buf (StringAsVoid (ул), -1);
    если (! био)
        бросить Ошибка чтения ();
}
аннулируются Биобокс :: NewBuffer ()
{
    BIO_free (био);
    био = BIO_new (BIO_s_mem ());
    если (! био)
        бросить Ошибка чтения ();
}
BIO * Биобокс :: Bio () Const
{
    вернуться био;
}
Биобокс :: Buffer Биобокс :: ReadAll ()
{
    buf.size = BIO_ctrl_pending (био);
    buf.buf = таНос (buf.size);
    если (BIO_read (био, buf.buf, buf.size) < 0) {
        // если (ERR_peek_error ()) {
        // ERR_reason_error_string (ERR_get_error ());
        // возвращает NULL;
        //}
        бросить Ошибка чтения ();
    }
    вернуться БУФ;
}

EvpBox :: EvpBox (RSA * Кейп)
{
    evpkey = EVP_PKEY_new ();
    если (! EVP_PKEY_set1_RSA (evpkey, Кейп)) {
        бросить Ошибка чтения ();
    }
}
EvpBox :: ~ EvpBox ()
{
    EVP_PKEY_free (evpkey);
}
EVP_PKEY * EvpBox :: Key ()
{
    вернуться evpkey;
}

Статическая INT pass_cb (символ * ЬиЕ, внутр размер, внутр rwflag, пустота * и)
{
    Const строка пас = reinterpret_cast<символ *>(И);
    INT Len = pass.size ();
    // если слишком долго, усечение
    если (LEN > размер)
        Len = размер;
    pass.copy (BUF, длина);
    вернуться Len;
}
аннулируется AccessCard :: Load (Const строки& PEM, Const строка& проходить)
{
    RSA_free (пара ключей);
    Биобокс био;
    bio.ConstructSink (PEM);
    = PEM_read_bio_RSAPrivateKey пара ключей (bio.Bio (), NULL, pass_cb,
                                         StringAsVoid (проход));
    Проверить ключ();                    
}
аннулируются AccessCard :: PublicKey (строка& PEM) сопзЬ
{
    Проверить ключ();
    Биобокс био;
    bio.NewBuffer ();
    INT RET = PEM_write_bio_RSA_PUBKEY (bio.Bio (), пара ключей);
    если (! RET)
        бросить Ошибка чтения ();
    Const Биобокс :: Buffer& ЬиЕ = bio.ReadAll ();
    PEM = строка (reinterpret_cast(Buf.buf), buf.size);
}

аннулируются AccessCard :: PrivateKey (строка& PEM, Const строка& ключевая фраза) сопзЬ
{
    Проверить ключ();
    Биобокс био;
    bio.NewBuffer ();

    EvpBox ЦПС (пара ключей);
    INT RET = PEM_write_bio_PKCS8PrivateKey (bio.Bio (), evp.Key (),
                                            EVP_aes_256_cbc (),
                                            LoseStringConst (ключевая фраза),
                                            passphrase.size (), NULL, NULL);
    если (! RET)
        бросить Ошибка чтения ();
    Const Биобокс :: Buffer& ЬиЕ = bio.ReadAll ();
    PEM = строка (reinterpret_cast(Buf.buf), buf.size);
}

// ------------------------------------------------ -------------------
// это обыкновение быть в конечном файле ... это наш блок тест
// ------------------------------------------------ -------------------
#включают
#включают
используя зЬй :: COUT;

Int основных ()
{
    AccessCard согл;                                                    
    // Новый ключ
    acc.Generate ();
    строка PEM;
    // Получить открытый ключ
    acc.PublicKey (PEM);
    соиЬ << PEM << "\ п";
    // Получить секретный ключ
    acc.PrivateKey (PEM, "Здравствуйте");
    соиЬ << PEM << "\ п";
    // Загрузка секретного ключа с помощью пропуска «привет»
    acc.Load (PEM, "Здравствуйте");
    acc.PublicKey (PEM);
    соиЬ << PEM << "\ п";
    возвращать 0;
}
 
genjix сейчас офлайн Пожаловаться на genjix   Ответить с цитированием Мультицитирование сообщения от genjix Быстрый ответ на сообщение genjix



Как заработать Биткоины?

Bitcoin Wallet * Portefeuille Bitcoin * Monedero Bitcoin * Carteira Bitcoin * Portafoglio Bitcoin * Bitcoin Cüzdan * 比特币钱包

bitcoin-zarabotat.ru
Почта для связи: bitcoin-zarabotat.ru@yandex.ru

3HmAQ9FkRFk6HZGuwExYxL62y7C1B9MwPW