2009-08-31 7 views
6

Есть ли способ использовать ключи RSA, которые я создал с помощью API Crypto ++ в OpenSSL? Я ищу способ сохранить ключи в формате, который Crypto ++ и OpenSSL могут легко их открыть.Использование ключей RSA с открытым кодом Crypto ++ на OpenSSL

Я пишу схему лицензирования и хочу проверить подписи и расшифровать файлы с помощью Crypto ++ API, но для создания файлов лицензии я бы хотел использовать веб-интерфейс (возможно, используя PHP, который поддерживает только OpenSSL), чтобы генерировать и шифровать/подписывать лицензии.

Я бы написал оба приложения, используя Crypto ++, и вызвал его из PHP, но поскольку закрытый ключ будет храниться в зашифрованном виде, пароль должен быть передан в приложение, а передача его в командной строке не кажется чтобы быть хорошей идеей для меня.

ответ

5

Оба Crypto ++ и OpenSSL могут обрабатывать закодированные ключи PKCS # 8. В крипто ++, вы можете генерировать ключи и конвертировать в PKCS # 8 буфера, как это,

AutoSeededRandomPool rng; 
RSAES_OAEP_SHA_Decryptor priv(rng, 2048); 
string der; 
StringSink der_sink(der); 
priv.DEREncode(der_sink); 
der_sink.MessageEnd(); 

// der.data() is the bytes you need 

Теперь вам просто нужно передать байты в PHP. Вы можете сохранить его в файле, отправить сообщение.

Единственное, что связано с тем, что интерфейс OpenSSL PHP принимает только PKCS # 8, закодированный PEM. Вы можете легко конвертировать DER-закодированные буфер в PEM, как это в PHP,

<?php 
function pkcs8_to_pem($der) { 

    static $BEGIN_MARKER = "-----BEGIN PRIVATE KEY-----"; 
    static $END_MARKER = "-----END PRIVATE KEY-----"; 

    $value = base64_encode($der); 

    $pem = $BEGIN_MARKER . "\n"; 
    $pem .= chunk_split($value, 64, "\n"); 
    $pem .= $END_MARKER . "\n"; 

    return $pem; 
} 
?> 

Вы также можете конвертировать PKCS # 8 в PEM в C++, если вы предпочитаете. Алгоритм очень прост, как вы можете видеть из кода PHP.

OpenSSL так распространен в наши дни. Я не вижу причин использовать Crypto ++ для обычных криптографических приложений, подобных этому.

0

Попробуйте эту ссылку: http://www.cryptopp.com/fom-serve/cache/62.html

Похоже, что вы должны будете использовать PKCS # 8 и конвертирование из DER в формат PEM, чтобы иметь возможность использовать ключи в OpenSSL. Я не уверен, что вы сможете использовать один файл для обоих.

Я использовал OpenSSL, поэтому я не уверен, какие у вас параметры с Crypto ++. Я нашел ссылку выше, выполнив поиск Google для этих терминов: Crypto ++ RSA OpenSSL.

DER - это двоичный формат OpenSSL для ключей и сертификатов.

PEM - это текстовый формат OpenSSL.

+0

Я видел это сообщение, но я искал программный путь к этому, возможно, к некоторому классу Crypto ++, который может конвертировать в DK PKCS8 и из POS-кодирования, используемого OpenSSL. – Vargas

+0

Вы читали http://www.cryptopp.com/wiki/Key_Format? –

1

Есть ли способ использовать ключи RSA, которые я создал с помощью API Crypto ++ в OpenSSL? Я ищу способ сохранить ключи в формате, который Crypto ++ и OpenSSL могут легко их открыть.

Да. В дополнение к закодированным ключам X.509 и PKCS # 8 (ответ ZZ Coder) вы также можете использовать кодированные PEM ключи, включая зашифрованные ключи. Поддержка ключей, закодированных PEM, была передана проекту в июле 2014 года для взаимодействия OpenSSL.

Для использования ключей, закодированных в PEM, вам необходимо получить Crypto ++ PEM Pack и перекомпилировать библиотеку. Пакет PEM не является частью библиотеки Crypto ++, предоставленной Вэй Даем в Crypto++ website.

После установки и перекомпилировать, его так просто, как:

// Load a RSA public key 
FileSource fs1("rsa-pub.pem", true); 
RSA::PublicKey k1; 
PEM_Load(fs1, k1); 

// Load a encrypted RSA private key 
FileSource fs2("rsa-enc-priv.pem", true); 
RSA::PrivateKey k2; 
PEM_Load(fs2, k2, "test", 4); 

// Save an EC public key 
DL_PublicKey_EC<ECP> k16 = ...; 
FileSink fs16("ec-pub-xxx.pem", true); 
PEM_Save(fs16, k16); 

// Save an encrypted EC private key 
DL_PrivateKey_EC<ECP> k18 = ...; 
FileSink fs18("ec-enc-priv-xxx.pem", true); 
PEM_Save(fs18, k18, "AES-128-CBC", "test", 4); 

Клавиши выглядят так на диске:

$ cat rsa-pub.pem 
-----BEGIN PUBLIC KEY----- 
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCg7ovcljEjZCFOdLWENBKE6FSk 
Nke6OP79SMJABJw+JoEBpNddK6/v99IvA1qU76V0V4k8qLvhkVUtk9FArhhRsxeF 
1fd8UVqgsT8j0YCVFcJ/ZA372ogpXyvc5aK9mZEiKE5TIF8qnDFFZiMWPrad1buk 
hg+eFdo78QRLA5plEQIDAQAB 
-----END PUBLIC KEY----- 
$ 
$ cat rsa-enc-priv.pem 
-----BEGIN RSA PRIVATE KEY----- 
Proc-Type: 4,ENCRYPTED 
DEK-Info: AES-128-CBC,E1A759E11CA515CE34B6E8CE5278C919 

slMx02TMblahTedEKsfS+qYYo4nZFaqI3PhCRYmE5zUa9clHm7yo36wIk3oo52OB 
f4AhOaJwiPQAbLe/kDHeP77iHd/4+hFNq/Haj6ahWRpXilLVOETLtefbzSGO8va3 
ORnwQpPThs2V0EetPU3LB3QcA/XRjWDzyNa7+LydOjKwbQdZnF/jND5NCkEkncNM 
iQJ1VWubN+Xs3Rx0CfLu5Chl1n7WnmCNMtLL/LtYeaR1SlRJa6BaF7hNHJJJ3+Jc 
8curCKlpobs+XnlDfjyqgTXolkiepn95TnT7KSqi3BqVEpq/5LKMnkDJg6nwUR7A 
w0jLNr1f8adWyBEj2Dp0D/jy8eDh65eHdJw4s8G5FZfBud1zWbvRQ3Ah70ISUKa3 
4q/6z2vervPgoc+rMVYDvRf/mqa4LMXYhuygsyx50OgPldCC2d0cVVFCg/ljdEzO 
UV5rSkK1Qczv8Nc1ZdY3fJA+qYIV8JqPPY+dJ2312R+myPi5Av0/69k8lZN5eIJk 
SkiiFQmabhc+o6z4RFA52a3lOud3eGM9L5nbFQGc5COzQVZ6y8t06tLIp9Y5zjA4 
KTgNncV5eq3Bau+cWXjP6pJRixFVfwIoy95mAur7B2P1iE4FXyZbvCovPL6vilT5 
kSqAo7Znu0RpTjE36tWY6tFt+GU7k8EBrjA3Qi+8xxqyYtr57Ns+H/j+hhJTN8L7 
IXoevwS81OPiB0Dmg6wLLXATG1+gCNXb8sd5U2eJhy4LOJA3y54CTgRnPXtM38CH 
K+JvnDstyUl9IGTsgUz51ZzyJNZGU9Ro3pt/a3Cs5IJumaygZ0LQ44WBw9m/vja9 
-----END RSA PRIVATE KEY----- 
$ 
$ cat ec-pub.pem 
-----BEGIN PUBLIC KEY----- 
MFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEVwXjdIb2yy25QbIO0XiIHpySXwSpIAcz 
v0Wdyq+fZ6BdJjs2jKvbs9pcRJn8yxlASWoz2R4NoHTZ2YokKsDfEg== 
-----END PUBLIC KEY----- 
$ 
$ cat ec-enc-priv.pem 
-----BEGIN EC PRIVATE KEY----- 
Proc-Type: 4,ENCRYPTED 
DEK-Info: AES-128-CBC,F1DBC73E26DCD310888932C2762B3512 

nikex48SFvtNOIrOEDipwmxaghjn4jtrvwI3d1H/VNq9yp26WqFZxBJCUPFBFLjH 
auA+AHeUo3BVkNQPs0VO4FD5xR50mtc2tCJizzhyTTTypLc3lRkxmD1MpeZnWRy2 
70foVtNSvLL/QLJqNJGm/G9kl0xPN4zAfOq7Txoscnk= 
-----END EC PRIVATE KEY----- 

Связанный: для других полезных Crypto ++ пластырей, см страницу Category:Patch на вики Crypto ++.

 Смежные вопросы

  • Нет связанных вопросов^_^