使用erlang + RSA解密字符串

时间:2012-06-27 19:49:57

标签: encryption erlang rsa

我有两个独立的应用程序,一个用Java编写,另一个用Erlang编写。 两个应用程序都以String格式相互发送消息,这些消息在Java应用程序中加密,需要在Erlang应用程序中解密。

问题在于: 我正在使用RSA公钥/私钥进行加密/解密。

如果我加密数据并在我的Erlang代码中解密所有内容,一切都很好。但是,我无法解密来自我的java端点的字符串。

这是我正在做的一个简单的测试:

PrivKey = "-----BEGIN RSA PRIVATE KEY----- ...",
% Data is the string I receive from Java
Data = "s013aA/SGN2iGYEbEIXXKvJiipqisRVfVEDneL8npRgThTHxTnYZESzVfCF463phPZyo5aOozisU7pwDdGKXgY8aqYZC+a3uES5muTb2RrzJ17yYku+g4S44vgIwZ9EyustZafNVGEYfgbWOYaPP/q5k683uR+MRHVqp6UbqMok=",
[PrivEntry] = public_key:pem_decode(list_to_binary(PrivKey)),
Priv = public_key:pem_entry_decode(PrivEntry),
BinData = iolist_to_binary(Data),
public_key:decrypt_private(Data, Priv).

执行此代码会产生如下错误:

** exception error: decrypt_failed

我认为问题是BinData的格式,但我找不到任何地方说我如何编码一个字符串来传递给decrypt_private函数。

有谁知道怎么做?这看起来很简单,但我花了很多时间才弄明白。

感谢。

1 个答案:

答案 0 :(得分:5)

在挖了一点之后,我找到了答案! 我需要将我的字符串解码为base64二进制文件。

PrivKey = "-----BEGIN RSA PRIVATE KEY----- ...",
% Data is the string I receive from Java
Data = "s013aA/SGN2iGYEbEIXXKvJiipqisRVfVEDneL8npRgThTHxTnYZESzVfCF463phPZyo5aOozisU7pwDdGKXgY8aqYZC+a3uES5muTb2RrzJ17yYku+g4S44vgIwZ9EyustZafNVGEYfgbWOYaPP/q5k683uR+MRHVqp6UbqMok=",
[PrivEntry] = public_key:pem_decode(list_to_binary(PrivKey)),
Priv = public_key:pem_entry_decode(PrivEntry),

BinData = base64:decode(Data), %<-- THIS IS THE MAGIC

public_key:decrypt_private(BinData, Priv).

希望这有助于其他人。