Как перенести объект из JS в другие языки?
в каком виде CryptoJS принимает в себя инстанс объекта самого себя и что он хеширует, чтобы повторить этот метод используя другие инструменты

Все криптографические алгоритмы работают с байтами. CryptoJS используется абстракцию в виде класса "WordArray" для представления байтов, т.к. это старая библиотека, написанная, когда не было "ArrayBuffer".

мне надо чтобы оно НЕ РАБОТАЛО также как и НЕ РАБОТАЕТ в js,
Оно работает. Причем правильно.

неужели по Вашему я могу переместиться во времени и пространстве к программисту, который когда-то захешировал слово таким методом и сказать ему "эй, ты хешируешь объект, не надо, хешируй строку" и дать ему этот код?
На что тот программист бы ответил: "Не неcи чушь".
И будет прав.

Т.к. в его случает программа берет байты из строки и хешерует их, потом опять хеширует их же и т.д:
SHA512(
        SHA512(
                SHA512("hello".getBytes()) 
        )
).toString("hex");
Для вывода в консоль предстaвляет их в виде хекс строки.

---

Хеши же от вывода якобы той программы на C++:
SHA512(
        SHA512(
                SHA512("hello".getBytes()).toString("hex").getBytes()
        ).toString("hex").getBytes()
).toString("hex");
Ничего не смущает? Что здесь cчитается не то же самое.

---

 чтобы повторить этот метод используя другие инструменты

Другие инструменты в виде Java:

import java.math.BigInteger;
import java.nio.charset.StandardCharsets;
import java.security.*;

public class Main {
    public static void main(String[] args) throws NoSuchAlgorithmException {
        byte[] bytesOfMessage = "hello".getBytes(StandardCharsets.UTF_8);
        MessageDigest SHA512 = MessageDigest.getInstance("SHA512");

        byte[] digest = SHA512.digest(bytesOfMessage);
        Main.log(digest);
        for (int i = 0; i < 4; i++) {
            digest = SHA512.digest(digest);
            Main.log(digest);
        }
    }
    private static void log(byte[] digest) {
        var hex = new BigInteger(1, digest).toString(16);
        if (hex.length() % 2 == 1) {
            hex = "0" + hex;
        }
        System.out.println(hex);
    }
}

Шок! Вывод такой же и у "неправильного" CryptoJS. Банковские приложения в опасносте!

---

Тема — кринж.
Хэшировать на каждой итерации надо не объект, а хэш, полученный на предыдущей итерации, строку.
Тогда не будет разницы в языках