我需要向大型数据文件的 tsa 发出时间戳请求,因此我正在使用 javscript crypto-js 在客户端中生成哈希。
当我稍后在java中尝试发出请求时,问题就来了。显然,TimeStampRequestGenerator.generate 方法需要一个 byte[] 参数,在示例中我可以看到它是从文件内容生成的 MessageDigest 对象,我找不到仅使用已经生成的哈希的方法。
是否可以仅使用已生成文件的哈希来发出请求?
谢谢
我需要向大型数据文件的 tsa 发出时间戳请求,因此我正在使用 javscript crypto-js 在客户端中生成哈希。
当我稍后在java中尝试发出请求时,问题就来了。显然,TimeStampRequestGenerator.generate 方法需要一个 byte[] 参数,在示例中我可以看到它是从文件内容生成的 MessageDigest 对象,我找不到仅使用已经生成的哈希的方法。
是否可以仅使用已生成文件的哈希来发出请求?
谢谢
经过艰苦的测试,我找到了解决方案。
在 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();
...