【问题标题】:Hash an Enum value using Sha256 in Rust在 Rust 中使用 Sha256 散列枚举值
【发布时间】:2022-01-21 00:31:22
【问题描述】:

我正在使用 Sha256 来散列多个值。一个值可以是一个枚举,我想知道如何散列它

use sha2::Sha256

enum EnumType{
  A,
  B,
  C { value: u8 }
}

let enum_value = EnumType::A;
let mut hasher = Sha256::new();

// How to hash the enum?
// hasher.update(enum_value);

hasher.finalize()

最简单的方法是为每个枚举值分配一个常量值,但这似乎不干净

fn get_enum_value(value: &EnumType)-> &[u8]{
    match value {
        EnumType::A => &[1u8],
        EnumType::B => &[2u8],
        EnumType::C { value } => &[3u8, value]
    }
}

// ... //
hasher.update(get_enum_value(enum_value));
// ... //

有没有更好的办法?

【问题讨论】:

标签: rust hash enums sha256


【解决方案1】:

Rust 不会向用户公开枚举的内存布局,但 Sha256 对字节序列进行操作,因此在某些时候您必须指定枚举如何转换为字节。您可以按照您的建议执行并手动执行,或者您也可以使用例如bincodeserde_json 来序列化您的结构以进行哈希处理。

【讨论】:

    猜你喜欢
    • 2019-10-04
    • 1970-01-01
    • 1970-01-01
    • 2012-09-16
    • 2016-10-28
    • 2021-01-04
    • 2016-04-18
    • 1970-01-01
    • 2017-03-14
    相关资源
    最近更新 更多