Slight
Cadet 2nd Year
- Registriert
- Juni 2015
- Beiträge
- 19
Hallo,
ich muss einen MerkleTree implementieren der balanciert und k-när ist. k wird auf 5! beschränkt.
1. Ich möchte also die Datenblöcke hashen und den Blättern des Baums zuordnen, soweit ich das richtig verstanden habe.
Folgenden Code habe ich gefunden, welcher allerdings einen Binärbaum verwendet:
(https://github.com/richpl/merkletree/blob/master/src/merkletree/MerkleTree.java)
Ich verstehe hier nicht wirklich den Unterschied von md.update und md.digest, ich habe das jetzt so verstanden dass "digest = md.digest(dataBlock.get(numBlocks-1));" nur das letzte byte Array hasht, aber das macht ja irgendwie keinen Sinn.
Auf dieser Seite: https://docs.oracle.com/javase/7/docs/api/java/security/MessageDigest.html habe ich es jetzt so verstanden, dass md.digest() den Hash produziert, und md.update das aktuelle Array in md legt um es dann zu hashen. Aber dann müsste diese Zeile doch auch innerhalb der Schleife liegen?
Ich würde mich freuen, wenn mich da jemand genauer aufklärt.
Außerdem wird hier (https://github.com/richpl/merkletree/blob/master/src/merkletree/MerkleTree.java) ganz oben die Logik des Binären Merkle-Trees erklärt: Ein Merkle-Tree besteht aus 2 Kindern und einer Hash Repräsentation der Kinder. Ich glaube für meine Aufgabenstellung brauche ich im Merkle-Tree selbst nur die Hash-Repräsentation. Diese Kinder sind entweder Blätter (in denen die Datenblöcke gespeichert werden) oder selbst Merkle-Trees.
Ich bin kurz davor das zu verstehen, aber blicke leider doch noch nicht ganz durch und kann es dementsprechend auch nicht richtig auf den k-nären Merkle-Tree übertragen. Ich hätte es erst so implementiert, dass es eine Klasse Merkle-Tree gibt die Nodes enthält und eine Klasse Nodes, welche dann z.B. die Variablen "List<Node> childs" und "Node Parent" und "List<byte[]> dataBlock", ich glaube das wird aber viel komplizierter als die oben erwähnte Idee.
Kann mir das vielleicht jemand erklären und hätte eine Idee, wie man das auf einen k-nären Baum übertragen kann? Gibt es dann vielleicht statt "MerkleTree leftMerkleTree" "MerkleTree rightMerkleTree" eine Liste die MerkleTrees beinhaltet?
Liebe Grüße und danke schon mal im voraus!
ich muss einen MerkleTree implementieren der balanciert und k-när ist. k wird auf 5! beschränkt.
1. Ich möchte also die Datenblöcke hashen und den Blättern des Baums zuordnen, soweit ich das richtig verstanden habe.
Folgenden Code habe ich gefunden, welcher allerdings einen Binärbaum verwendet:
(https://github.com/richpl/merkletree/blob/master/src/merkletree/MerkleTree.java)
Code:
private byte[] digest(Leaf leaf)
{
final List<byte[]> dataBlock = leaf.getDataBlock();
// Create a hash of this data block using the
// specified algorithm
final int numBlocks = dataBlock.size();
for (int index=0; index<numBlocks-1; index++)
{
md.update(dataBlock.get(index));
}
// Complete the digest with the final block
digest = md.digest(dataBlock.get(numBlocks-1));
return (digest);
}
Ich verstehe hier nicht wirklich den Unterschied von md.update und md.digest, ich habe das jetzt so verstanden dass "digest = md.digest(dataBlock.get(numBlocks-1));" nur das letzte byte Array hasht, aber das macht ja irgendwie keinen Sinn.
Auf dieser Seite: https://docs.oracle.com/javase/7/docs/api/java/security/MessageDigest.html habe ich es jetzt so verstanden, dass md.digest() den Hash produziert, und md.update das aktuelle Array in md legt um es dann zu hashen. Aber dann müsste diese Zeile doch auch innerhalb der Schleife liegen?
Ich würde mich freuen, wenn mich da jemand genauer aufklärt.
Außerdem wird hier (https://github.com/richpl/merkletree/blob/master/src/merkletree/MerkleTree.java) ganz oben die Logik des Binären Merkle-Trees erklärt: Ein Merkle-Tree besteht aus 2 Kindern und einer Hash Repräsentation der Kinder. Ich glaube für meine Aufgabenstellung brauche ich im Merkle-Tree selbst nur die Hash-Repräsentation. Diese Kinder sind entweder Blätter (in denen die Datenblöcke gespeichert werden) oder selbst Merkle-Trees.
Ich bin kurz davor das zu verstehen, aber blicke leider doch noch nicht ganz durch und kann es dementsprechend auch nicht richtig auf den k-nären Merkle-Tree übertragen. Ich hätte es erst so implementiert, dass es eine Klasse Merkle-Tree gibt die Nodes enthält und eine Klasse Nodes, welche dann z.B. die Variablen "List<Node> childs" und "Node Parent" und "List<byte[]> dataBlock", ich glaube das wird aber viel komplizierter als die oben erwähnte Idee.
Kann mir das vielleicht jemand erklären und hätte eine Idee, wie man das auf einen k-nären Baum übertragen kann? Gibt es dann vielleicht statt "MerkleTree leftMerkleTree" "MerkleTree rightMerkleTree" eine Liste die MerkleTrees beinhaltet?
Liebe Grüße und danke schon mal im voraus!
Zuletzt bearbeitet: