如何将时间戳添加到pdf

时间:2015-05-22 10:32:38

标签: java pdf timestamp

我的应用程序必须使用java为文件添加时间戳。我想做的是:

  1. 创建文件的哈希值
  2. 将创建的哈希发送到时间戳服务器
  3. 将收到的时间戳令牌添加到文件
  4. 我成功地开发了前两个步骤,现在我被困在第三个步骤。

    我创建哈希的代码:

        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将文档识别为签名文档。我找到了时间戳添加为数字签名的示例,但我不想签署带有签名的文档。我只想要时间戳。

    有没有人可以帮助我? (如果有不清楚的地方,请询问)

    提前致谢!

0 个答案:

没有答案