2010-10-16 15 views
1

Je travaille sur un projet où nous transmettons des données cryptées entre applications C#, Java et ColdFusion. Pour générer la clé et iv pour le cryptage AES 256 bits. Je le tableau suivant que je dois convertir en ColdFusion 9 à clé utilisableColdfusion 9 Clé de chiffrement de Java Byte Array

Le code Java pour la clé

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 
     } 

Le code ColdFusion pour crypter (ne peut pas sembler obtenir ce à tous apparais ici):

<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]" 


En utilisant .getBytes() et encodage base64 - je finis aussi avec une clé qui est de 113 octets. Toute aide serait fantastique!

Répondre

2

Une façon est de convertir les valeurs int à un tableau d'octets, puis à 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

Merci! Cela a fonctionné parfaitement! Si j'essaie d'appliquer la même logique à un vecteur d'initialisation, cela ne fonctionne pas. Je reçois un message d'erreur "Wrong IV length: doit être long de 16 octets."

le tableau pour la IV est:

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

Le IV n'a pas besoin d'être en base64. Est-ce que vous passez juste dans les octets bruts à savoir javacast ("byte []", octets) – Leigh