Я пытался найти множество решений в Интернете, но они не работали. Мне нужно подписать PDF-файл, извлекая хеш из PDF-файла и отправляя его в другую серверную службу, чтобы он подписал хэш и вернул его в подпись PDF. Пожалуйста, помогите мне! Ниже приведен мой код, где DataSigner — это API сторонней службы для вызова сервера для подписи хэша:
// create ContentSigner that signs by calling the external endpoint
ContentSigner contentSigner = new ContentSigner() {
private MessageDigest digest = MessageDigest.getInstance("SHA-256");
private OutputStream stream = OutputStreamFactory.createStream(digest);
@Override
public byte[] getSignature() {
try {
byte[] hash = digest.digest();
//byte[] signedHash = serverSignature.sign(Base64.getEncoder().encodeToString(hash));
List hashes = Arrays.asList(hash);
List signedHash = signer.sign(hashes);
return signedHash.get(0);
} catch (Exception e) {
throw new RuntimeException("Exception while signing", e);
}
}
@Override
public OutputStream getOutputStream() {
return stream;
}
@Override
public AlgorithmIdentifier getAlgorithmIdentifier() {
return new AlgorithmIdentifier(new ASN1ObjectIdentifier("1.2.840.113549.1.1.11"));
}
};
Подробнее здесь: https://stackoverflow.com/questions/798 ... is-invalid