2013-03-27 74 views
4

我无法在Erlang中“pem_entry_decode”GPG公钥。通过OpenSSL生成的公钥工作正常。我已经按照Erlang - Importing GPG Public Key中的建议修复了GPG密钥。在Erlang中解码PGP密钥

#!/usr/local/bin/escript 

main(_) -> 
    [application:start(X) || X <- [crypto, public_key, ssl]], 
    Msg = list_to_binary("Hello World!"), 
    %{ok, FileContents} = file:read_file("public_openssl.pem"), 
    {ok, FileContents} = file:read_file("public_gpg.asc"), 
    show(FileContents), 
    [Entry] = public_key:pem_decode(FileContents), 
    show(Entry), 
    Key = public_key:pem_entry_decode(Entry), 
    show(Key), 
    EM = public_key:encrypt_public(Msg, Key), 
    show(EM). 

show(Something) -> 
    io:format("~p~n", [Something]). 

错误:

escript: exception error: no match of right hand side value 
       {error, 
        {asn1, 
         {wrong_tag, 
          {{expected,16},{got,131097,{131097,<<"\r">>}}}}}} 
    in function public_key:der_decode/2 (public_key.erl, line 170) 
    in call from erl_eval:do_apply/6 (erl_eval.erl, line 572) 
    in call from erl_eval:expr/5 (erl_eval.erl, line 367) 
    in call from escript:eval_exprs/5 (escript.erl, line 850) 
    in call from erl_eval:local_func/5 (erl_eval.erl, line 470) 
    in call from escript:interpret/4 (escript.erl, line 768) 
    in call from escript:start/1 (escript.erl, line 277) 
    in call from init:start_it/1 
+0

源代码是否与错误堆栈一致?错误堆栈提到public_key:der_decode,而源代码提到public_key:pem_decode ... – user803422 2013-03-28 11:57:10

+0

我检查了public_key.erl。 'der_decode'由'pem_entry_decode'调用。不知道为什么它不显示整个堆栈。 – ram 2013-03-28 12:49:50

+1

我建议你尝试在一个更新的Erlang版本中重现这个问题,比如在R16B中。有消息称现在对各种DER编码的东西更加友好,甚至有点畸形。 – Keynslug 2013-06-10 12:48:36

回答

0

从你:

{ok, FileContents} = file:read_file("public_gpg.asc") 

FileContents,选择前16个字符。