gpt4 book ai didi

rust - 如何添加一个字段,该字段是其他字段的加密哈希?

转载 作者:行者123 更新时间:2023-12-03 11:34:02 24 4
gpt4 key购买 nike

我试图弄清楚如何添加一个字段,该字段是其他字段的加密哈希。我有:

pub struct Message {
pub size: usize,
pub id: MessageId,
pub attribute: MessageAttribute,
}
我想要类似的东西:
pub struct Message {
pub size: usize,
pub id: MessageId,
pub attribute: MessageAttribute,
pub hash: MessageHash,
}

pub struct MessageHash(pub Vec<u8>);
我可以创建另一个结构,然后在设置结构时计算哈希值:
pub struct HashedMessage {
pub content: Message,
pub hash: MessageHash,
}

pub fn message_hash(data: &Message) -> MessageHash {
let mut hasher = DefaultHasher::new();
data.hash(&mut hasher);
MessageHash(hasher.finalize().to_vec())
}

let content = Message { /* ... */ };
let hash = hash_message(msg);
let msg = HashedMessage { content, hash };
此方法引入了另一个结构,我将不得不更改代码库以使用新结构来代替旧结构。
我的另一种方法是拥有一个 new方法,该方法接收该结构的每个成员,然后输出最终的结构,并在输入上计算出哈希字段。这似乎是合理的。一种可能的选择是在此方法中将哈希设置为0,然后在 message_hash结构(第一个嵌入了哈希字段的结构)上使用 Message计算哈希,然后对其进行分配。
还有另一种方法吗?什么是添加哈希的惯用正确方法?这些消息将被序列化并通过网络发送,因此我没有一种每次都能计算哈希值的方法。

最佳答案

您可以使用如下组成:

pub struct Message {
pub size: usize,
pub id: MessageId,
pub attribute: MessageAttribute,
}

pub struct Hashed<M> {
pub hash: MessageHash,
pub message: M,
}

impl<M> Hashed<M> {
fn new(message: M) -> Self {
let hash = compute_hash(&message);
Self {
hash,
message,
}
}
}
然后,您可以使用 MessageHashed<Message>
如果您有一个 Hashed<Message>,但您需要一个 Message,则可以借用该字段。否则,您将不得不创建一个新的 Hashed<Message>并再次计算哈希值。

关于rust - 如何添加一个字段,该字段是其他字段的加密哈希?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63599241/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com