如何使用erlang public_key:decrypt_private?
问题描述:
我尝试使用公共RSA密钥加密文本,并使用专用RSA密钥对此文本进行解密。当我加密用户公钥时,它就起作用。如何使用erlang public_key:decrypt_private?
编码PUBLIC_KEY
encrypt_public_key(PlainText, PublicKey) ->
[ RSAEntry2 ] = public_key:pem_decode(PublicKey),
PubKey = public_key:pem_entry_decode(RSAEntry2),
public_key:encrypt_public(PlainText, PubKey).
但是当我尝试使用私钥来解密这个文本,它不工作,我不知道为什么。
解码私钥
decrypt_private_key(CryptText,PrivateKey) ->
[ RSAEntry2 ] = public_key:pem_decode(PrivateKey),
PrivKey = public_key:pem_entry_decode(RSAEntry2),
Result = public_key:decrypt_private(CryptText, PrivKey, rsa_pkcs1_padding),
Result.
我如何编码,并尝试解码
PublicKey = ems_util:open_file(?SSL_PATH ++ "/" ++ binary_to_list(<<"public_key.pem">>)),
CryptoText = ems_util:encrypt_public_key(ResponseData2,PublicKey),
PrivateKey = ems_util:open_file(?SSL_PATH ++ "/" ++ binary_to_list(<<"private_key.pem">>)),
%erro in this line
TextPlain = ems_util:decrypt_private_key(TextCrypt,PrivateKey).
错误
=ERROR REPORT==== 17-Mar-2017::10:59:29 ===
Ranch listener ems_http_server1, connection process <0.2159.0>, stream 1 had its request process <0.2160.0> exit with reason function_clause and stacktrace [{public_key,decrypt_private,[<<55,66,78,123,456,2456>>,<<55,173,2367,140,71>>,asn1_NOVALUE}],[{file,"public_key.erl"},{line,313}]},{ems_util,decrypt_private_key,2,[{file,"src/util/ems_util.erl"},{line,614}]},{ems_auth_user,do_barer_authorization,1,[{file,"src/auth/ems_auth_user.erl"},{line,51}]},{ems_dispatcher,lookup_request,1,[{file,"src/distpatcher/ems_dispatcher.erl"},{line,70}]},{ems_http_handler,init,2,[{file,"src/http/ems_http_handler.erl"},{line,22}]},{cowboy_handler,execute,2,[{file,"src/cowboy_handler.erl"},{line,39}]},{cowboy_stream_h,execute,3,[{file,"src/cowboy_stream_h.erl"},{line,172}]},{cowboy_stream_h,proc_lib_hack,3,[{file,"src/cowboy_stream_h.erl"},{line,157}]}]
我不知道发生了什么。
答
我描述了我的问题的解决方案。问题是公众和私钥生成错误。生成用openssl一对密钥RSA正确的做法是:
openssl genrsa -out private.pem 2048
openssl rsa -in private.pem -out public.pem -outform PEM -pubout
这些命令生成正确的密钥对,现在的代码IR正常工作。
尝试将'public_key:decrypt_private(CryptText,PrivKey,rsa_pkcs1_padding)'更改为'public_key:decrypt_private(CryptText,PrivKey,[{rsa_pad,rsa_pkcs1_padding}])''''。 – Dogbert