2012-07-02 3 views
3

Erlang에서 RSA 비공개 키가 주어지면 RSA 공개 키와 x509 공개 키가 해당 priv 키와 연관되어 반환 될 수 있습니다.Erlang의 RSA 비공개 키로부터 x509 공개 키를 생성하십시오.

개인 키에서 모듈러스와 공개 지수를 가져 와서 RSA 공개 키를 생성 할 수 있다는 것을 알고 있습니다.

--from OTP-PUB-KEY.hrl 
-record('RSAPrivateKey',{ 
version, modulus, publicExponent, privateExponent, prime1, prime2, exponent1, exponent2,  coefficient, otherPrimeInfos = asn1_NOVALUE}). 

-record('RSAPublicKey',{ 
modulus, publicExponent}). 

그러나 x509 공개 키는 어떻게 생성합니까?

$private = Crypt::OpenSSL::RSA->new_private_key($hash_ref->{'private'}); 
{rsa => $private->get_public_key_string(), 
x509 => $private->get_public_key_x509_string()}; 

사람이 어떤 생각이 어떻게 그렇게해야합니까 :

나는 Perl로 작성 내 예전의 코드 이런 식으로 뭔가를 호출하여 해당 작업을 수행하는 데 사용하기 때문에이 가능 알아?

----- 단지 UPDATE ----

내가 얼랑 PUBLIC_KEY 문서 X509에 대한 학습 시간을 보내고 읽은 후 해결책을 발견 :

감안할 때 나는 'RSAPublicKey'를 생성 할 수 있습니다 단순히 점점 계수 및 publicExponent하여 'RSAPrivateKey'에서 두 키를 생성하는 내 코드는 다음과 같습니다

getPublicKeysFromPrivateKey(#'RSAPrivateKey'{modulus = M, publicExponent = PE}) -> 
    RSAPub = #'RSAPublicKey'{modulus = M, publicExponent = PE}, 

    %% Encoding the keys 
    RSAPublicKey = public_key:pem_encode([public_key:pem_entry_encode('RSAPublicKey', RSAPub)]), 
    X509PublicKey = public_key:pem_encode([public_key:pem_entry_encode('SubjectPublicKeyInfo', RSAPub)]), 

    [{rsa, RSAPublicKey},{x509, X509PublicKey}]. 

이 생산됩니다 어떤 :

[{rsa,<<"-----BEGIN RSA PUBLIC KEY----- \nMIGJAoGBAMU8ZcQ4S+gHDuZd6cEdqbf9l1Hw4fxQrJ455B2kJRUwyKidVbCH2omy\nI0SLNu92"...>>}, 
{x509,<<"-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDFPGXEOEvoBw7mXenBHam3/ZdR\n8OH8UKye"...>>}] 

감사합니다.

+0

당신이 X509 인증서를 의미합니까 :

public_key(#'RSAPrivateKey'{modulus = Mod, publicExponent = Exp}) -> #'RSAPublicKey'{modulus = Mod, publicExponent = Exp}. 

은에서 유효한 기록을 가져 오는 것 같습니다 무엇입니까? 왜 그런 일이 필요하다고 생각하니? –

+0

x509 공개 키가 정말 필요합니다. 이 형식은 RASPublicKey의 다른 형식으로 'PEM'형식은 'BEGIN RSA PUBLIC KEY'대신 'BEGIN PUBLIC KEY'형식입니다. – RobisonSantos

답변

1

분명한 점은 다음과 같습니다

public_key(public_key:pem_entry_decode(hd(public_key:pem_decode(element(2, file:read_file("<OTP Src Dir>/lib/public_key/test/public_key_SUITE_data/server_key.pem")))))). 
관련 문제