Добрый день. Пытаюсь подписать PDF файл.
CMSSignedDataGenerator gen = new CMSSignedDataGenerator();
InputStream dataLoaded = this.getClass().getResourceAsStream("/Tickets.pdf");
byte[] data = dataLoaded.toString().getBytes();
CMSProcessableByteArray cmsData = new CMSProcessableByteArray(data);
Signature sig = Signature.getInstance(certToCheck.getPublicKey().getAlgorithm(), provider); // Load signature
KeyFactory keyFact = KeyFactory.getInstance(certToCheck.getPublicKey().getAlgorithm(), provider);
PrivateKey privateKey;
try {
KeyStore.PrivateKeyEntry pkEntry = (KeyStore.PrivateKeyEntry) store.getEntry(alias,
new KeyStore.PasswordProtection(password.toCharArray()));
privateKey = pkEntry.getPrivateKey();
try {
sig.initSign(privateKey);
gen.addSigner(privateKey, certToCheck, CMSSignedDataGenerator.DIGEST_SHA256);
// gen.addCertificatesAndCRLs(certStore);
try {
String name = provider.getName();
CMSSignedData signed = gen.generate(cmsData, provider.getName());
int mst = signed.getEncoded().length;
FileOutputStream fileOuputStream = new FileOutputStream("C:\\Test\\test_2.txt");
ByteArrayOutputStream out = new ByteArrayOutputStream();
try (ASN1InputStream asn1 = new ASN1InputStream(signed.getEncoded())) {
DEROutputStream dos = new DEROutputStream(fileOuputStream);
dos.writeObject(ASN1Object.fromByteArray(signed.getEncoded()));
}
fileOuputStream.close();
byte[] data1 = Base64.decode(data);
SignerInformationStore rr = signed.getSignerInfos();
} catch (CMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (InvalidKeyException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (UnrecoverableEntryException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
1. Правильно ли логика подписания ?
2. При получения CMSSignedData его byte.length всегда равен 698, независимо от размера pdf файла. В этом объекте CMSSignedData - хранится ли данные о pdf файле.
3. Что делать дальше с CMSSignedData, я его пытаюсб сохранить в файл, но он мне выдает закодированный файл. Какими средствами можно его декодировать. Методы?