我的应用程序必须使用java为文件添加时间戳。我想做的是:
我成功地开发了前两个步骤,现在我被困在第三个步骤。
我创建哈希的代码:
private static byte[] hashFile(File file) throws Exception {
MessageDigest digest = MessageDigest.getInstance("SHA-256");
FileInputStream fis = new FileInputStream(file.getAbsolutePath());
byte[] bytesBuffer = new byte[1024];
int bytesRead = 0;
while ((bytesRead = fis.read(bytesBuffer)) != -1) {
digest.update(bytesBuffer, 0, bytesRead);
}
byte[] hashed = digest.digest();
return hashed;
}
我的代码,用于将哈希值发送到时间戳服务器并接收带时间戳令牌的响应:
private TimeStampToken sendHash(byte[] hash, String tsa_url) throws Exception {
TimeStampRequestGenerator reqgen = new TimeStampRequestGenerator();
reqgen.setCertReq(true);
TimeStampRequest req = reqgen.generate(TSPAlgorithms.SHA256, hash);
byte[] request = req.getEncoded();
URL url = new URL(tsa_url);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
Authenticator.setDefault (new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication ("michielvd.20@gmail.com", "TestAccount".toCharArray());
}
});
con.setDoOutput(true);
con.setDoInput(true);
con.setRequestMethod("POST");
con.setRequestProperty("Content-type", "application/timestamp-query");
con.setRequestProperty("Content-length", String.valueOf(request.length));
OutputStream out = con.getOutputStream();
out.write(request);
out.flush();
con.getContent();
if (con.getResponseCode() != HttpURLConnection.HTTP_OK) {
throw new IOException("Received HTTP error: " + con.getResponseCode() + " - " + con.getResponseMessage());
}
TimeStampResp resp = TimeStampResp.getInstance(new ASN1InputStream(con.getInputStream()).readObject());
TimeStampResponse response = new TimeStampResponse(resp);
response.validate(req);
TimeStampToken token = response.getTimeStampToken();
return token;
}
现在我想将时间戳令牌(sendHash方法返回)添加到pdf文件中,我不知道如何这样做。 我在网上搜索但没有找到有用的东西。
目的是将标记添加为pdf中的签名,因此adobe reader将文档识别为签名文档。我找到了时间戳添加为数字签名的示例,但我不想签署带有签名的文档。我只想要时间戳。
有没有人可以帮助我? (如果有不清楚的地方,请询问)
提前致谢!