如何拥有自定义时间戳和哈希 sha256 并将它们转换为带有 Rust 的字符串?

How to have a custom timestamp and a hash sha256 and convert them into a string with Rust?

我尝试使用这样的自定义时间戳:YYYYMMDDHHMMSS
我用它来记录我现在的时间 :

let timestamp = chrono::offset::Local::now();

获得类似的东西:

2020-11-12T09:53:02.419182341+00:00

那么我怎样才能extract/convert把它变成我想要的格式,然后再把它转换成字符串呢?
因为我想用哈希将它连接起来。
我实际上正在使用这个:

let auth = [timestamp, hash].concat();

我还有一个问题: 如何在 sha256 中对我的散列进行编码以及如何将其转换为字符串?
因为我实际上在使用 :

  let mut hasher = Sha256::new();
  hasher.update("Hello world");
  let hash = hasher.finalize();
  println!("{:?}", hash);

我得到了类似的东西:

[100, 236, 136, 202, 0, 178, 104, 229, 186, 26, 53, 103, 138, 27, 83, 22, 210, 18, 244, 243, 102, 178, 71, 114, 50, 83, 74, 138, 236, 163, 127, 60]

对吗?

我尝试使用 elastic_types、格式、SystemTime、...
但是我无法达到我的目标...... 所以欢迎您的帮助! :)

How can I convert this into the format I want and convert it into a String?

Chrono 在 chrono::format::strftime 中有多种格式选项,例如:

use chrono::prelude::*;

fn main() {
    println!("{}", Local::now().format("%Y%m%d%H%M%S")); // YYYYMMDDHHMMSS
}
202011121108

How do I encode my hash in Sha256 and how do I convert it to a String?

使用 {:?} 将得到 Debug 特征实现的结果。

您似乎在使用 {:x}{:X} 表示小写和大写十六进制的十六进制字符串,例如:

use sha2::{Sha256, Digest};

fn main() {
    println!("{:x}", Sha256::digest(b"Hello world"));
}
64ec88ca00b268e5ba1a35678a1b5316d212f4f366b2477232534a8aeca37f3c

std::fmt 的 Rust 文档中有更多关于此的内容。


要连接两者,您可以执行类似于以下操作的操作:

use chrono::prelude::*;
use sha2::{Sha256, Digest};

fn main() {
    let s = "Hello world";

    println!("{}{:x}",
        Local::now().format("%Y%m%d%H%M%S"),
        Sha256::digest(s.as_bytes())
    );
}
2020111211080464ec88ca00b268e5ba1a35678a1b5316d212f4f366b2477232534a8aeca37f3c