2014-02-11 142 views
0

道歉 - 所有 - 加密的新手 - 一直使用Google搜索幾天,最後直接詢問。PHP如何處理三字節加密的32字節密鑰

我需要使用PHP來加密和解密Java TripleDES「DESede/ECB/NoPadding」函數可讀的數據。

在Java中有一個雙倍長度的32個字符的鍵,例如, 「F4D5CBDF57FEEDCFA41FD6AFE7BCDFEA」,它被轉換成字節並提供加密結果,沒有任何問題。 (我沒有代碼。)

在PHP中,當相同的密鑰通過mcrypt的嘗試了TripleDes的,歐洲央行的函數調用,還有一個關鍵的長度錯誤,因爲該系統預計24個字符的最大值。

我需要做什麼才能讓PHP產生與Java相同的加密結果?

+2

你必須找出Java中的密鑰派生函數是什麼。 TripleDES接受最多168位(21字節)的密鑰。這32個字符的鍵看起來實際上是以十六進制編碼的128位數據。 – NullUserException

回答

0

由於NullUserException假設:在將密鑰用於三重DES密碼之前,請將密鑰從十六進制轉換爲二進制。你的Java代碼必須做同樣的事情;在Java中,三重DES密鑰必須具有24個字節或16個字節(僅在更高版本的Java中支持16個字節,以前必須通過將前8個字節複製到末尾以創建「ABA」DES來轉換爲24個字節鍵)。

三字節DES不支持32字節密鑰。但是,如果您使用PHP的可怕mcrypt庫,則會將密鑰切割爲可用的最高密鑰大小。因此,PHP並不是一個快速失敗的情況,而是讓用戶在挫折中脫穎而出。

+0

除了當之無愧的戳到mcrypt libs,我的答案中缺少的東西?任何澄清需要? –

相關問題