문제

OpenSSL에서 Crypto++ API로 생성한 RSA 키를 사용할 수 있는 방법이 있습니까?내가 찾고 있는 것은 Crypto++와 OpenSSL 모두 쉽게 열 수 있는 형식으로 키를 저장하는 방법입니다.

라이센스 체계를 작성 중이며 Crypto++ API를 사용하여 서명을 확인하고 파일을 해독하고 싶지만 라이센스 파일을 생성하려면 웹 인터페이스(아마도 OpenSSL만 지원하는 PHP 사용)를 사용하여 생성하고 암호화하고 싶습니다. 라이센스에 서명하십시오.

두 애플리케이션을 모두 Crypto++를 사용하여 작성하고 PHP에서 호출하겠지만 개인 키는 암호화된 형식으로 저장되므로 비밀번호를 애플리케이션에 전달해야 하며 이를 명령줄에 전달하는 것은 좋지 않은 것 같습니다. 나에게 아이디어.

도움이 되었습니까?

해결책

Crypto++와 OpenSSL 모두 PKCS#8로 인코딩된 키를 처리할 수 있습니다.crypto++에서는 다음과 같이 키를 생성하고 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로 전달하기만 하면 됩니다.파일로 저장하거나 메시지로 보낼 수 있습니다.

유일한 문제점은 PHP의 OpenSSL 인터페이스가 PEM으로 인코딩된 PKCS#8만 허용한다는 것입니다.PHP에서 이와 같이 DER로 인코딩된 버퍼를 PEM으로 쉽게 변환할 수 있습니다.

<?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;
}
?>

원하는 경우 C++에서 PKCS#8을 PEM으로 변환할 수도 있습니다.PHP 코드에서 볼 수 있듯이 알고리즘은 매우 간단합니다.

OpenSSL은 요즘 매우 널리 퍼져 있습니다.이와 같은 일반적인 암호화 애플리케이션에 Crypto++를 사용할 이유가 없습니다.

다른 팁

OpenSSL에서 Crypto ++ API로 생성 한 RSA 키를 사용하는 방법이 있습니까? 내가 찾고있는 것은 키를 Crypto ++ 및 OpenSSL 모두 쉽게 열 수있는 형식으로 키를 저장하는 방법입니다.

예. X.509 및 PKCS #8 인코딩 키 (ZZ Coder의 답변) 외에도 암호화 된 키를 포함한 PEM 인코딩 키를 사용할 수도 있습니다. PEM 인코딩 키 지원은 2014 년 7 월 OpenSSL Interop의 프로젝트에 기부되었습니다.

PEM 인코딩 키를 사용하려면 Crypto ++를 가져와야합니다. PEM 팩 도서관을 다시 컴파일하십시오. PEM 팩은 Wei Dai가 제공 한 Crypto ++ 라이브러리의 일부가 아닙니다. 암호화 ++ 웹 사이트.

설치하고 다시 컴파일하면 간단합니다.

// 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-----

관련 : 다른 유용한 암호 ++ 패치는 카테고리 : 패치 암호화 ++ 위키의 페이지.

이 링크를 시도하십시오 :http://www.cryptopp.com/fom-serve/cache/62.html

PKCS#8을 사용하고 DER에서 PEM 형식으로 변환하여 OpenSSL에서 키를 사용할 수 있어야합니다. 둘 다에 단일 파일을 사용할 수 있는지 확실하지 않습니다.

나는 OpenSSL 만 사용 했으므로 Crypto ++로 어떤 옵션이 있는지 잘 모르겠습니다. Crypto ++ RSA OpenSSL이 용어에 대해 Google을 검색하여 위의 링크를 찾았습니다.

Der는 키 및 인증서에 대한 OpenSSL의 이진 형식입니다.

PEM은 OpenSSL의 텍스트 형식입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top