-2

以下に詳述するように、クライアントが Cipher.encrypt() 関数を使用して暗号化されたメッセージを送信してきました (未知のプログラミング言語から)。

    var key : String = "I deleted the key intentionally";
    var encodedKey : Bytes = Encoding.toBase64(new Bytes(key, "UTF8"));

    var salt : String = "263BC60258FF4876";

    var message : String = "1234567891234567";

    var encryptAlgorithm : String = "AES/CBC/PKCS5Padding";

    var encryptedMessage : Cipher = new Cipher();
    encryptedMessage = encryptedMessage.encrypt(message, encodedKey, encryptAlgorithm, salt, 1);

PHP を使用してメッセージからデータを抽出するには、メッセージを復号化する必要があります。PHP関数 mcrypt_decrypt を使用しようとしました:

string mcrypt_decrypt ( string $cipher , string $key , string $data , string $mode [, string $iv ] )

しかし、2 つの関数の引数が異なるように見えるため、メッセージを解読できませんでした。

PHPを使用してメッセージを復号化する方法について、誰か提案がありますか?

4

1 に答える 1

0

次の行は意味がありません。「後方」のようです。

var encodedKey : Bytes = Encoding.toBase64(new Bytes(key, "UTF8"));

キーがBase64でエンコードされていると仮定すると(これは合理的です)、バイト配列にデコードすると予想され、Encoding.toBase64正しくないように見えます。しかし、これは言語が不明なため、クライアントに言語が何であるかを尋ねます。

次に、メッセージが PKCS#5 パディングで暗号化されているように見えますが、mcrypt はそれをサポートしていません。いくつかの解決策があります。 1. PHP コードのパディングを削除します。2. defuseなどの PKCS#5 パディングをサポートするより優れたライブラリを使用します。

価値があるのsaltはおそらく IV (Initialization Vector) の名前です。

于 2016-05-21T14:13:44.397 に答える