Bueno, es inexacto -- es solo codificado en hexadecimal. La parte relevante codificada en hexadecimal es F700AD168253BC248497969EDB988620 -- el 1: significa que fue encriptado por KEY001 en keys.ini. Puedo generar la misma cadena encriptada usando tanto uDESEncrypt como las clases javax.crypto, con algoritmo = "DESede", transformación = "DESede/CBC/PKCD5Padding". Obtengo el resultado " 1:0653565108cc220e" de uDESEncrypt y "0653565108CC220E" del java.
Mi sugerencia sería que cambies la KEY00x en keys.ini que crees que se está usando, verifiques que el DES3 generado dentro de IDM cambie, luego uses esa clave en hexadecimal con una función rápida usando javax.crypto para asegurarte de que estás usando el mismo método de generación y claves. Un código java de muestra que debería producir los mismos resultados que uDESEncrypt (sin la parte " 1:") es el siguiente.
String PLAIN_TEXT = "TU TEXTO AQUÍ";
String SHARED_KEY = "TU CLAVE AQUÍ"; // solo los 48 caracteres hexadecimales
String algoritmo = "DESede";
String transformación = "DESede/CBC/PKCS5Padding";
byte[] keyValue = Hex.decodeHex(SHARED_KEY.toCharArray());
DESedeKeySpec keySpec = new DESedeKeySpec(keyValue);
IvParameterSpec iv = new IvParameterSpec(new byte[8]);
SecretKey key = SecretKeyFactory.getInstance(algoritmo).generateSecret(keySpec);
Cipher encrypter = Cipher.getInstance(transformación);
encrypter.init(Cipher.ENCRYPT_MODE, key, iv);
byte[] input = PLAIN_TEXT.getBytes("UTF-8");
byte[] encrypted = encrypter.doFinal(input);
System.out.println(new String(Hex.encodeHex(encrypted)).toUpperCase());
Editado por: Chris Foley el 1 de marzo de 2012 a las 2:01 AM