2010-09-08 27 views
1

Je suis en train de chiffrer une chaîne à l'aide Crypter() ColdFusion avec une 3ème partie fourni clé comme ceci:CF DESede Crypter() Longueur Question clé

encrypteded = encrypt('theString', 'FD52250E230D1CDFD5C2DF0D57E3E0FEFD52250E230D1CDF', 'DESEDE/CBC/NoPadding', 'BASE64', ToBase64('0')); 

Je reçois:

« La La clé spécifiée n'est pas une clé valide pour ce cryptage: Algorithme de clé incorrect, DESede attendu. "

Que dois-je faire à cette clé en termes de codage/décodage pour l'obtenir dans le bon format?

+1

Dans votre exemple de code, il semble que vous transmettiez un nom de variable au lieu de la chaîne littérale de la clé. Je suppose que c'est un problème avec votre exemple, pas votre code réel, mais juste pensé que je vérifierais. –

+0

Je m'excuse. Après avoir relu le code de contrôle de parité, j'ai réalisé qu'il cherchait une parité impaire. Désolé pour la chasse aux oies sauvages. – erickson

+0

Ben, c'était juste un problème avec l'exemple, pas de code réel, mais j'ai mis à jour pour éviter toute confusion. –

Répondre

1

Généralement, lorsque vous utilisez les clés fournies dans d'autres langues, vous devez faire un peu de gymnastique pour l'utiliser en Base64.

Essayez ceci pour l'argument clé:

ToBase64(BinaryDecode('FD52250E230D1CDFD5C2DF0D57E3E0FEFD52250E230D1CDF','hex')) 

Mais, pour faire ce travail pour moi, la chaîne d'entrée nécessaire pour être un multiple de 8 octets (parce que vous spécifiez NoPadding), et IV nécessaire pour être également un multiple de 8 octets. Donc, cela a fini par marcher pour moi - je ne sais pas si vous serez capable de le déchiffrer à l'autre bout, si la IV qu'ils spécifient est vraiment ce que vous avez énuméré ici.

encrypteded = encrypt('theStrin', ToBase64(BinaryDecode('FD52250E230D1CDFD5C2DF0D57E3E0FEFD52250E230D1CDF','hex')), 'DESEDE/CBC/NoPadding', 'BASE64', ToBase64('0000')); 

n ° IV a également travaillé aussi bien (avec une sortie différente, évidemment):

encrypteded = encrypt('theStrin', ToBase64(BinaryDecode('FD52250E230D1CDFD5C2DF0D57E3E0FEFD52250E230D1CDF','hex')), 'DESEDE/CBC/NoPadding', 'BASE64'); 

Si vous avez reçu un maléfice IV, alors vous pouvez l'utiliser comme tel:

encrypteded = encrypt('theStrin', ToBase64(BinaryDecode('FD52250E230D1CDFD5C2DF0D57E3E0FEFD52250E230D1CDF','hex')), 'DESEDE/CBC/NoPadding', 'BASE64', BinaryDecode("7fe8585328e9ac7b","hex")); 

Espérons que ce soit assez d'infos pour vous mettre en route!

0

La seule chose qui me semble être la valeur de l'algorithme que vous utilisez. Peut-être essayer ça?

encrypteded = encrypt('theString', 'FD52250E230D1CDFD5C2DF0D57E3E0FEFD52250E230D1CDF', 'DESEDE', 'BASE64', ToBase64('0')); 

Je ne sais pas si les paramètres /CBC/NoPadding seront ce que vous voulez, mais je ne pense pas qu'ils seront autorisés dans l'argument de l'algorithme.

+0

adam, DESEDE/CBC/NoPadding est définitivement ce dont j'ai besoin. Malheureusement, c'est aussi ce qui cause le problème. –

+0

Des paramètres supplémentaires tels que/CBC/NoPadding sont autorisés dans l'algorithme. Mais comme Edward M Smith l'a mentionné, NoPadding signifie que vous avez vous-même rembourré. ie Assurez-vous que les chaînes d'entrée sont un multiple de 8 octets. – Leigh