2010-07-01 3 views

답변

28

당신은 키 생성하기 SSH-Keygen은을 사용하는 경우 :

$ ssh-keygen 

그런 다음 당신은 그냥이 같은 DER 형식으로 공개 키를 꺼내 쓸 수있는 OpenSSL을 사용할 수 있습니다

$ openssl rsa -in id_rsa -out pub.der -outform DER -pubout 
writing RSA key 

이 같은 PEM으로 DER 출력을 볼 수 있습니다

$ openssl rsa -in pub.der -inform DER -pubin -text 

나는 그래서 그것을 사용하는 것이 얼마나 쉬운 지 모르는, 루비를 사용하지 않는 Ruby의 OpenSSL.

편집 : 나는 너무 빨리 대답했다 - 당신은 id_rsa.pub를 썼고 당신은 id_rsa 자체를 가지고 있지 않을지도 모른다. 또 다른 스택 오버플로 문제는 역 변환에 대한 것이지만 거기에있는 소스 코드는 도움이 될 수 있습니다. Convert pem key to ssh-rsa format PEM을 사용하면 openssl을 사용하여 PEM을 DER로 변환 할 수 있습니다.

편집 : 2014 년 5 월 : Ruby가 내가 가장 좋아하는 프로그래밍 언어가되었으며 원래 질문 (편집 된 이후)에서 Ruby에 대해 질문했습니다. 당신은 쉘에서 다음하려면 openssl 명령으로 출력을 확인할 수 있습니다

require 'openssl' 
require 'base64' 

def read_length(s) 
    # four bytes, big-endian 
    length = s[0..3].unpack('N')[0] 
end 

def read_integer(s, length) 
    # shift all bytes into one integer 
    s[4..3 + length].unpack('C*').inject { |n, b| (n << 8) + b } 
end 

def cut(s, length) 
    s[4 + length..-1] 
end 

def decode_pub(pub) 
    # the second field is the Base64 piece needed 
    s = Base64.decode64(pub.split[1]) 

    # first field reading "ssh-rsa" is ignored 
    i = read_length(s) 
    s = cut(s, i) 

    # public exponent e 
    i = read_length(s) 
    e = read_integer(s, i) 
    s = cut(s, i) 

    # modulus n 
    i = read_length(s) 
    n = read_integer(s, i) 

    [ e, n ] 
end 

def make_asn1(e, n) 
    # Simple RSA public key in ASN.1 
    e0 = OpenSSL::ASN1::Integer.new(e) 
    n1 = OpenSSL::ASN1::Integer.new(n) 
    OpenSSL::ASN1::Sequence.new([ e0, n1 ]) 
end 

pub = File.read('id_rsa.pub') 

asn1 = make_asn1(*decode_pub(pub)) 

# Let OpenSSL deal with converting from the simple ASN.1 
key = OpenSSL::PKey::RSA.new(asn1.to_der) 

# Write out the public key in both PEM and DER formats 
File.open('id_rsa.pem', 'w') { |f| f.write key.to_pem } 
File.open('id_rsa.der', 'w') { |f| f.write key.to_der } 

:

$ openssl rsa -pubin -text -in id_rsa.pem 
$ openssl rsa -pubin -text -inform DER -in id_rsa.der 
여기에 id_rsa.pub (공개 키)를 읽어와 OpenSSL을 생성, DER 형식의 공개 키를 작성하는 코드는
+0

좋은 해결책, 고마워요! –

2

만 SSH-Keygen은에 의해 생성 된 공개 키에 액세스 할 수 있습니다, 그것은 형식, 다음 작품을 DER로 변환 할 경우

ssh-keygen -f id_rsa.pub -e -m PKCS8 | openssl pkey -pubin -outform DER

티 먼저 ssh-keygen을 사용하여 키를 PKCS8 PEM 형식으로 변환 한 다음 openssl pkey을 사용하여 DER 형식으로 변환합니다.

(이는 Jim Flood의 대답과 동일하지만 개인 키 파일을 건드리지 않고 수행합니다.)

+0

그는 "어떻게 id_rsa.pub 파일을 프로그래밍 방식으로 RSA DER 형식의 키로 변환 할 수 있습니까?" 그는 명령 할 것을 요구하지 않았습니다. – jww

+0

플러스, 모든 배포판에서 작동하지 않습니다. –

관련 문제