首页 新闻 会员 周边

将一个merkle树写入文件,怎么用设计好的Java的merkle树对象去读取这份文件?

0
悬赏园豆:40 [待解决问题]

这个写入的方式有何要求,设计好的对象实例怎么才能正确读取这份数据文件?

nihaoqingtuan的主页 nihaoqingtuan | 初学一级 | 园豆:104
提问于:2023-05-16 20:27

已解决

nihaoqingtuan 11个月前
< >
分享
所有回答(3)
0

要将Merkle树写入文件并使用Java的Merkle树对象正确读取该文件,你需要考虑以下几个要点:

文件格式:确定如何将Merkle树的结构和数据存储到文件中。一种常见的方法是将Merkle树序列化为某种格式,如JSON或二进制格式。

文件写入:将Merkle树写入文件时,你需要根据文件格式将树的结构和数据逐层写入文件。你可以使用Java的文件操作API(如FileOutputStream或BufferedWriter)来打开文件并逐层写入树的节点和数据。

文件读取:设计好的Java的Merkle树对象应该能够正确读取存储在文件中的Merkle树。你需要根据文件格式逐层读取文件,并使用读取的数据重构Merkle树。你可以使用Java的文件操作API(如FileInputStream或BufferedReader)打开文件并逐层读取树的节点和数据。

数据校验:在读取文件后,你应该执行一次校验以确保读取的数据和重构的Merkle树匹配。这可以通过计算树的根哈希并将其与文件中的根哈希进行比较来实现

Technologyforgood | 园豆:5675 (大侠五级) | 2023-05-16 22:33
0

// 假设你有一个Java project with a MerkleTree 类
// 以下为示例 如何将 MerkleTree写入一个文件然后读取

import java.io.*;
import java.util.ArrayList;
import java.util.List;

public class MerkleTreeFileIO {

public static void writeMerkleTreeToFile(MerkleTree tree, String filename) throws IOException {
FileOutputStream fos = new FileOutputStream(filename);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(tree);
oos.close();
fos.close();
}

public static MerkleTree readMerkleTreeFromFile(String filename) throws IOException, ClassNotFoundException {
FileInputStream fis = new FileInputStream(filename);
ObjectInputStream ois = new ObjectInputStream(fis);
MerkleTree tree = (MerkleTree) ois.readObject();
ois.close();
fis.close();
return tree;
}

public static void main(String[] args) throws IOException, ClassNotFoundException {
//创建MerkleTree对象
List<String> data = new ArrayList<>();
data.add("hello");
data.add("world");
MerkleTree tree = new MerkleTree(data);

// 将MerkleTree写入文件
writeMerkleTreeToFile(tree, "merkle_tree.ser");

// 读取 MerkleTree 
MerkleTree readTree = readMerkleTreeFromFile("merkle_tree.ser");

// 校验两个树是否相等
System.out.println(tree.equals(readTree)); // should print true

}
}

lanedm | 园豆:2378 (老鸟四级) | 2023-05-17 08:10
0

已解决。写了一个计算编号的算法

nihaoqingtuan | 园豆:104 (初学一级) | 2023-05-17 16:39

对于AES算法,相信很多程序员小伙伴都听过、用过,其原理本文就不介绍了,而是讲讲在实际项目中的应用。前几天,项目需要跟乙方接口对接,乙方提供加密后的二维码信息串,而我这边负责对加密串进行解密。其中加解密算法用的就是AES 128位 无向量,加密模式为ECB,填充模式为PKCS7Padding,密钥长度32位。

开始的开始,是先参考网上提供的CBC\PKCS7Padding加密模式进行改造,发现其实没有自己想象的辣么简单,因为会直接报如下图足够折腾自己一番的错误,网上了解了一下,发现jdk自带的只是支PKCS5Padding,不支持PKCS7Padding。



最后的最后,google了一番:发现在获取加密instance前,需要额外添加 BouncyCastleProvider() 这样的provider。具体缘由就没去深究了,毕竟先把问题解决了才是头等大事,其他的先晾在一边!
支持(0) 反对(0) nihaoqingtuan | 园豆:104 (初学一级) | 2023-05-17 16:41
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册