1

我需要向大型数据文件的 tsa 发出时间戳请求,因此我正在使用 javscript crypto-js 在客户端中生成哈希。

当我稍后在java中尝试发出请求时,问题就来了。显然,TimeStampRequestGenerator.generate 方法需要一个 byte[] 参数,在示例中我可以看到它是从文件内容生成的 MessageDigest 对象,我找不到仅使用已经生成的哈希的方法。

是否可以仅使用已生成文件的哈希来发出请求?

谢谢

4

1 回答 1

1

经过艰苦的测试,我找到了解决方案。

在 javascript 中生成的 SHA-256 哈希经过一些类型转换后可以直接在 bouncyclaste 中使用,如下所示:

byte[] decodedHex = Hex.decodeHex(digest.toCharArray());

所以你可以像平常一样使用它

java.security.MessageDigest

当它们都转换为

byte[]

完整代码在这里:

// Get hash code as hexadecimal string (generated by crypto-js)
String digest = servletRequest.getParameter("digest");

// hexadecimal to string decoder
byte[] decodedHex = Hex.decodeHex(digest.toCharArray());

// Timestamp request
TimeStampRequestGenerator reqgen = new TimeStampRequestGenerator();
TimeStampRequest req = reqgen.generate(TSPAlgorithms.SHA256, decodedHex);
byte request[] = req.getEncoded();
...
于 2014-12-04T16:51:08.150 回答