2

私は2つの別々のアプリケーションを持っています。1つはJavaで書かれ、もう1つはErlangで書かれています。両方のアプリケーションは文字列形式で相互にメッセージを送信します。これらのメッセージは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関数に渡す文字列をエンコードする方法を説明している場所が見つかりませんでした。

誰かがこれを行う方法を知っていますか?これは簡単に思えますが、理解するのにかなりの時間がかかります。

ありがとう。

4

1 に答える 1

6

もう少し掘り下げてみたら、答えが見つかりました!文字列を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).

これが他の人々に役立つことを願っています。

于 2012-06-27T20:03:54.250 に答える