Я пытался написать свою собственную шахтеру, но просто не понимаю, что функция хеширования () в hash.h делает.
Это мой код:
Код:
// выделить 80 байт 0x00s
неподписанные символ * память = (неподписанные символ *) таНос (80);
INT * Результат = (беззнаковое INT *) таНос (32);
память, 0,80);
память, 0,32);
кажется, делают хэш под названием SHA-256
хэш = Хеш (память, память + 80);
Хэш:% s \ п", Hash.GetHex () c_str ()).
//14508459...0e57e74b
неподписанные символ * память = (неподписанные символ *) таНос (80);
INT * Результат = (беззнаковое INT *) таНос (32);
память, 0,80);
память, 0,32);
кажется, делают хэш под названием SHA-256
хэш = Хеш (память, память + 80);
Хэш:% s \ п", Hash.GetHex () c_str ()).
//14508459...0e57e74b
Однако, когда я пытаюсь сделать это с _любой_ другой реализацией SHA256 Я всегда получить другой результат (я попробовал три, который дал мне тот же результат). Вот мой Java-код:
Код:
MessageDigest мкр = MessageDigest.getInstance ("SHA-256");
байт [] переваривать = md.digest (ByteBuffer.allocate (80) .array ());
для (байт с: дайджест) {
System.out.format ("%Икс", С);
}
// 5b6fb58e61fa475939767d68a446f97f1bff2c0e5935a3ea8bb51e6515783d8
байт [] переваривать = md.digest (ByteBuffer.allocate (80) .array ());
для (байт с: дайджест) {
System.out.format ("%Икс", С);
}
// 5b6fb58e61fa475939767d68a446f97f1bff2c0e5935a3ea8bb51e6515783d8
Я думал, что, может быть, я должен удвоить хэш, но это оставляет меня с этим:
Код:
MessageDigest MD2 = MessageDigest.getInstance ("SHA-256");
байт [] digest2 = md2.digest (md2.digest (ByteBuffer.allocate (80) .array ()));
для (байт с: digest2) {
System.out.format ("%Икс", С);
}
// 4be757e8f70eb93640c8468274ba759745a7aa2b7d25ab1e421b259845014
байт [] digest2 = md2.digest (md2.digest (ByteBuffer.allocate (80) .array ()));
для (байт с: digest2) {
System.out.format ("%Икс", С);
}
// 4be757e8f70eb93640c8468274ba759745a7aa2b7d25ab1e421b259845014
Таким образом, хэш-я получаю от реализации Bitcoin отличается от любого другого внедрения SHA256 по какой-то причине ... что мне не хватает? Могу ли я с помощью алгоритма неправильно? инициализировано ли это по-другому (другая реализация не дает мне возможность параметризующих функции)? Имеет ли он просто работает по-другому (не в соответствии со стандартом)?
Любая помощь будет оценена