【问题标题】:BouncyCastle TimeStampProtocol | How Do I get the original hash from a TimeStampToken?BouncyCastle 时间戳协议 |如何从 TimeStampToken 获取原始哈希?
【发布时间】:2019-02-12 22:01:39
【问题描述】:

我从散列数据创建了一个 TimeStampRequest 并将其发送到 tsa。

TSA 以 Granted 响应进行响应,我得到了带有时间戳的字节数组。

如何获取原始哈希数据,以便验证 TSA 发送的时间戳是我声称拥有的时间戳?

提前致谢。

请求

TimeStampRequestGenerator reqGen = new TimeStampRequestGenerator();
SHA1 sha1 = SHA1CryptoServiceProvider.Create();

ValidateInput(data);
reqGen.SetCertReq(true);

Hash = sha1.ComputeHash(Encoding.UTF8.GetBytes(data));

TimeStampRequest request = reqGen.Generate(
                 TspAlgorithms.Sha1, Hash, BigInteger.ValueOf(100));

byte[] reqData = request.GetEncoded();

record.DtRequest = DateTime.Now;

HttpWebRequest httpReq = (HttpWebRequest)WebRequest.Create(stampURI);
httpReq.Method = "POST";
httpReq.ContentType = "application/timestamp-query";
httpReq.ContentLength = reqData.Length;

// Write the request content
Stream reqStream = httpReq.GetRequestStream();
reqStream.Write(reqData, 0, reqData.Length);
reqStream.Close();

HttpWebResponse httpResp = (HttpWebResponse)httpReq.GetResponse();

// Read the response
Stream respStream = new BufferedStream(httpResp.GetResponseStream());
TimeStampResponse response = new 

TimeStampResponse(respStream);
                    respStream.Close();
TimeStamp = response.TimeStampToken.GetEncoded();

验证

var TSToken = new TimeStampToken(new CmsSignedData(TSPTimeStamp.DataContent));
//Here, I should reverse the TimeStampToken to the original hash

【问题讨论】:

  • 请尝试比较 HashTSToken.TimeStampInfo.GetMessageImprintDigest()
  • 非常感谢!请作为问题回复,以便我可以给你赏金

标签: c# timestamp bouncycastle


【解决方案1】:

您可以使用此方法获取TimeStampToken的签名摘要

byte[] digest = TSToken.TimeStampInfo.GetMessageImprintDigest();

然后你可以将这个值与原来的Hash值进行比较

【讨论】:

    猜你喜欢
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-20
    • 1970-01-01
    • 2010-12-19
    • 2021-08-30
    • 2015-03-10
    相关资源
    最近更新 更多