2016-08-11 3 views
1

Ich habe das nächste Problem. Erste public_key über http und haben solche binären (es ist viel größer, aber ich links nur gefälschte Inhalte key):Wie parse public_key zu erlang Datensatzformat

<<"-----BEGIN PUBLIC KEY-----\nMIB\n-----END PUBLIC KEY-----">> 

Need crypto:verify/5 zu nennen. Aber es wartet auf rsa_public() = [key_value()] = [E, N] Und ich kann Weg/Informationen nicht finden, wie von meinem binären öffentlichen Schlüsselexponenten und Modulen erhalten.

Vielen Dank für jede Hilfe

UPDATE

ich eine solche Art und Weise

[{_, Modulus, Exponent}] = public_key:pem_decode(PublicKey) 
RSAPublicKey = [Exponent, Modulus] 

Aber crypto:verify(rsa, sha256, Binary, Sign, RSAPublicKey) stürzt mit

** exception error: bad argument 
    in function crypto:rsa_verify_nif/4 
     called as crypto:rsa_verify_nif(sha256, 
             {digest,<<138,12,163,24,186,81,122,113,15,221,229,18,66, 
                68,254,150,205,251,145,83,107,139,192,236,65, 
                ...>>}, 
             <<40,169,124,140,188,173,31,150,44,227,57,150,41,119,67, 
              12,100,69,14,17,153,221,182,12,22,55,...>>, 
             [not_encrypted, 
             <<48,130,1,34,48,13,6,9,42,134,72,134,247,13,1,1,1,5,0, 
              3,130,1,15,...>>]) 
    in call from crypto:verify/5 (crypto.erl, line 491) 


Binary = <<250,22,62,160,112,157,51,51,128,0,19,136,87,172,119,11,1,234,46,241, 
      195,26,161,249,36,88,36,113,47,229,93,206,11>>, 

Sign = <<72,138,112,61,19,195,159,50,225,213,41,161,74,220,141,134,242,22,124, 
     250,29,82,163,240,192,255,183,226,60,156,3,85,51,251,53,44,191,113,98, 
     188,128,211,182,82,109,239,190,30,45,31,97,0,241,134,138,97,46,133,22, 
     169,109,134,33,73,98,171,206,53,12,68,201,155,230,9,132,63,169,141,73, 
     164,99,194,230,121,254,50,230,95,255,61,197,126,95,66,48,227,48,88,65, 
     95,8,222,10,164,133,192,47,238,21,172,103,80,53,115,132,246,140,34,36, 
     135,108,12,214,180,178,198,191,129,147,133,177,32,160,221,18,244,255, 
     254,14,148,163,169,31,251,148,170,246,235,46,16,206,42,156,215,199,50, 
     78,93,210,215,223,170,59,135,70,166,138,224,13,224,151,59,28,203,30, 
     244,178,33,91,4,212,204,25,127,45,98,174,199,74,147,172,248,53,60,141, 
     68,1,10,18,71,8,141,196,28,63,30,239,2,192,246,117,11,235,81,173,143, 
     207,55,32,171,6,236,223,194,223,206,140,202,193,241,63,17,165,146,136, 
     252,119,241,229,4,178,186,132,191,42,134,98,85,141,9,44,79,79,165,197, 
     43>>, 


RSAPublicKey =  [not_encrypted, 
       <<48,130,1,34,48,13,6,9,42,134,72,134,247,13,1,1,1,5,0,3,130,1, 
       15,0,48,130,1,10,2,130,1,1,0,167,250,126,245,154,26,64,78,95, 
       230,173,52,133,251,82,139,189,140,204,18,176,83,193,38,111, 
       24,167,216,68,216,139,188,48,246,133,34,117,27,180,254,181, 
       112,153,4,144,249,19,214,87,99,68,242,139,55,106,183,247,21, 
       126,42,121,166,57,82,51,43,54,121,188,21,122,175,50,108,138, 
       242,160,191,121,1,161,151,208,177,206,60,126,37,196,163,144, 
       141,60,140,16,72,63,27,160,56,1,194,43,48,153,75,197,42,223, 
       20,201,232,10,176,84,150,64,188,241,88,216,234,95,49,48,53, 
       196,241,78,216,31,10,154,123,237,236,97,10,115,192,38,168, 
       152,78,22,216,180,214,48,69,191,191,173,125,197,103,98,98, 
       241,173,13,88,6,237,169,99,179,216,219,64,76,15,214,113,248, 
       181,222,5,22,239,117,113,4,200,62,210,180,212,157,209,209,18, 
       50,133,103,26,118,155,93,28,110,85,17,236,252,19,191,126,115, 
       244,138,81,234,94,219,131,213,82,80,184,49,125,99,156,95,91, 
       196,9,119,251,213,109,84,20,228,28,224,172,146,3,95,103,7,42, 
       213,17,169,236,230,31,108,226,188,140,163,199,2,3,1,0,1>>] 
+0

Bitte aktualisieren Sie Ihre Frage, um ein vollständiges Beispiel der Pubkey + Signatur + Datei hinzuzufügen, so dass wir überprüfen können, ob wir eine funktionierende Lösung haben. –

+0

@NathanielWaisbrot fertig! –

Antwort

1

Schließlich fand, habe ich Arbeitslösung gefunden:

[RSa] = public_key:pem_decode(PublicKey), 
RSAPublicKey = public_key:pem_entry_decode(RSa), 
public_key:verify(Binary, sha256, Sign, RSAPublicKey).