2016-05-21 42 views
-2
相當於

一個客戶發給我使用Cipher.encrypt()函數(從某種編程語言未知的我)加密的消息:什麼是詳述如下這個Cipher.encrypt()函數在PHP

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解密消息的建議?

+2

有人需要先檢測該語言。 –

+0

看起來語言是[ActionScript](http://www.adobe.com/devnet/actionscript/learning/as3-fundamentals/variables.html) –

+1

最好不要使用mcrypt,它是棄用的,一直沒有並且不支持標準PKCS#7(néePKCS#5)填充,只有非標準的null填充甚至不能用於二進制數據。 mcrypt有很多優秀的[bug](https://sourceforge.net/p/mcrypt/bugs/)可以追溯到2003年。反而考慮使用[defuse](https://github.com/defuse/php-encryption)它正在維護和正確。 – zaph

回答

0

下面一行沒有意義,它似乎是「倒退」。

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

假定關鍵是Base64編碼(這是合理的)人們期望將其解碼成一個字節數組和Encoding.toBase64似乎不正確。但是,由於語言不明,這是一項任務,詢問客戶語言是什麼。

接下來看起來消息是用PKCS#5填充進行加密的,而mcrypt不支持。有幾個解決方案:1.刪除你的PHP代碼中的填充。 2.使用支持PKCS#5填充的更好的庫,例如defuse

有價值的salt可能是IV(初始化向量)命名不佳。