C # para Java TripleDES, resultados diferentes

Estou tentando converter esse algoritmo de criptografia C # para Java; no entanto, continuo recuperando resultados criptografados ligeiramente diferentes (ainda não tentei a descriptografia). Também pode ser importante ressaltar que não consigo alterar o código C #.

No entanto, quando eu chamo a função de criptografia em C # na string "test", ela retornaránmj8MjjO52y928Syqf0J+g== No entanto, em Java, ele retornaráC6xyQjJCqVo=

O C#

private static String key = "012345678901234567890123";

public static string encrypt(String stringToEncrypt)
{
    TripleDES des = CreateDES(key);
    ICryptoTransform ct = des.CreateEncryptor();
    byte[] input = Encoding.Unicode.GetBytes(stringToEncrypt);
    byte[] output = ct.TransformFinalBlock(input, 0, input.Length);
    //return output;
    return Convert.ToBase64String(output);
}


public static String decrypt(string encryptedString)
{
    byte[] input = Convert.FromBase64String(encryptedString);
    TripleDES des = CreateDES(key);
    ICryptoTransform ct = des.CreateDecryptor();
    byte[] output = ct.TransformFinalBlock(input, 0, input.Length);
    return Encoding.Unicode.GetString(output);
}


public static TripleDES CreateDES(string key)
{
    MD5 md5 = new MD5CryptoServiceProvider();
    TripleDES des = new TripleDESCryptoServiceProvider();
    des.Key = md5.ComputeHash(Encoding.Unicode.GetBytes(key));
    des.IV = new byte[des.BlockSize / 8];
    return des;
}

Minha tentativa de converter para Java

private static String key = "012345678901234567890123";

public static void main(String[] args) throws Exception {
    String text = "test";
    String codedtext = encrypt(text);
    //String decodedtext = decrypt(codedtext);

    System.out.println(new String(codedtext));
    //System.out.println(decodedtext); 
}

public static String encrypt(String message) throws Exception {
    MessageDigest md = MessageDigest.getInstance("md5");
    byte[] digestOfPassword = md.digest(key.getBytes("unicode"));
    byte[] keyBytes = Arrays.copyOf(digestOfPassword, 24);
    //for (int j = 0, k = 16; j < 8;) {
    //  keyBytes[k++] = keyBytes[j++];
    //}

    SecretKey key = new SecretKeySpec(keyBytes, "DESede");
    IvParameterSpec iv = new IvParameterSpec(new byte[8]);
    Cipher cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding");
    cipher.init(Cipher.ENCRYPT_MODE, key, iv);

    byte[] plainTextBytes = message.getBytes();
    byte[] cipherText = cipher.doFinal(plainTextBytes);

    String output = Base64.encode(cipherText);

    return output;
}

public static String decrypt(String message) throws Exception {
    byte[] messageBytes = Base64.decode(message);

    MessageDigest md = MessageDigest.getInstance("md5");
    byte[] digestOfPassword = md.digest(key.getBytes());
    byte[] keyBytes = Arrays.copyOf(digestOfPassword, 24);
    for (int j = 0, k = 16; j < 8;) {
        keyBytes[k++] = keyBytes[j++];
    }

    SecretKey key = new SecretKeySpec(keyBytes, "DESede");
    IvParameterSpec iv = new IvParameterSpec(new byte[8]);
    Cipher decipher = Cipher.getInstance("DESede/CBC/PKCS5Padding");
    decipher.init(Cipher.DECRYPT_MODE, key, iv);

    byte[] plainText = decipher.doFinal(messageBytes);

    return new String(plainText);
}

Alguém vê o que estou supervisionando?

questionAnswers(1)

yourAnswerToTheQuestion