в каком виде 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. Банковские приложения в опасносте!
---
Тема — кринж.