在 Rust 中使用 Sha256 散列枚举值
Hash an Enum value using Sha256 in Rust
我正在使用 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 不会向用户公开枚举的内存布局,但 Sha256 对字节序列进行操作,因此在某些时候您必须指定枚举如何转换为字节。您可以按照您的建议手动执行,或者您也可以使用例如 bincode or serde_json 序列化您的结构以进行哈希处理。
我正在使用 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 不会向用户公开枚举的内存布局,但 Sha256 对字节序列进行操作,因此在某些时候您必须指定枚举如何转换为字节。您可以按照您的建议手动执行,或者您也可以使用例如 bincode or serde_json 序列化您的结构以进行哈希处理。