2010-10-16 64 views
1

我正在處理一個項目,我們正在C#,Java和ColdFusion應用程序之間傳遞加密數據。爲256位AES加密生成密鑰和iv。我有以下的數組,我需要在ColdFusion的9轉化爲可用的關鍵來自Java字節數組的Coldfusion 9加密密鑰

的Java代碼的關鍵

new byte[]{ 
       (byte)172, (byte)181, (byte)241, (byte)21, (byte)129, 
       (byte)236, (byte)96, (byte)46, (byte)92, (byte)211, 
       (byte)187, (byte)106, (byte)90,(byte)69, (byte)29, 
       (byte)186, (byte)99, (byte)65, (byte)134, (byte)125, 
       (byte)218,(byte)117, (byte)9, (byte)223, (byte)13, 
       (byte)207, (byte)20, (byte)62, (byte)31,(byte)226, (byte)129, (byte)33 
     } 

的ColdFusion代碼加密(似乎無法得到這一切顯示這裏):

<cfset awsSecret = "[172,181,241,21,129,236,96,46,92,211,187,106,90,69,29,186,99,65,134,125,218,117,9,223,13,207,20,62,31,226,129,33]" 


使用.getBytes()和base64編碼 - 我最終還得到一個113字節的密鑰。任何幫助將是太棒了!

回答

2

的一種方法是爲int值轉換爲一個字節數組,然後爲Base64

<cfset ints = [172,181,241,21,129,236,96,46,92,211,187,106,90,69,29,186,99,65,134,125,218,117,9,223,13,207,20,62,31,226,129,33]> 
<cfset bytes = []> 
<cfloop array="#ints#" index="i"> 
    <cfset arrayAppend(bytes, javacast("int", i).byteValue())> 
</cfloop> 
<cfset keyAsBase64 = BinaryEncode(javacast("byte[]", bytes), "base64")> 
0

謝謝!這工作完美!如果我嘗試將相同的邏輯應用於初始化矢量,則不起作用。我收到錯誤消息「錯誤的IV長度:必須是16個字節長。」

對於IV陣列是:

getIV = [125,56,31,217,204,10,29,154,162,142,127,89,77,225,31,100] 
+0

的IV不需要採用base64。你只是傳遞原始字節,即javacast(「byte []」,bytes) – Leigh 2010-11-03 20:41:59