Есть вопрос, как мы можем проверит что контент подписанного документа и оригинальный документ одинаковы. То есть:
[ul]
Есть документ CMSSignedData который закодирован в Base64:
[code]
InputStream dataLoaded = this.getClass().getResourceAsStream("/testtext.pdf");
byte[] data = dataLoaded.toString().getBytes();
Signature sig = Signature.getInstance(certToCheck.getSigAlgName(), provider); // Load signature
KeyFactory keyFact = KeyFactory.getInstance(certToCheck.getPublicKey().getAlgorithm(), provider);
PrivateKey privateKey;
sig.initSign(privateKey);
sig.update(data);
[b]CMSProcessableByteArray cmsData = new CMSProcessableByteArray(data);
CMSSignedData signed = gen.generate(cmsData, true, provider.getName());
FileOutputStream fileOuputStream = new FileOutputStream("C:\\Test\\test_3.txt");
byte[] signedDataEncoded = signed.getEncoded();
fileOuputStream.write(Base64.encode(signedDataEncoded));
[/b]
[/code
[li] и есть просто оригинальный файл в pdf[/li]
[/ul]
Понял что хэш файл всегда разный, если подписывать один и тот же документ несколько раз. Так как там есть информация о времени подписания файла и какая та информация:
[spoiler] SEQUENCE {
OBJECTIDENTIFIER 1.2.840.113549.1.1.11 (sha256WithRSAEncryption)
NULL
}
OCTETSTRING cc8d574664a6981e34db20cc92d90567f9e895af5e46ceef8be505d35826f080ead9e0dce6ba77594945fb750d0577900fb6760f047ecedb907c893d7dc5570c3f8d99153dc32ab36a7ac3675034e3d52c1b2e2d044b2e7e46212bc018cf8e5e6f834929d5d7b64f8d64175d91921231f49b400f335d63d0e8c2e88c5fec6b4e59af8c49e8332dcedd786302a8f06ff54bc95c7385afdbf40469a467da09a6d976888a1cc37290904845b469ce376ed9c3641e3db5d9dc6de407edc6abd89757f0c75770582807ce483cd951198c5b63ca5ed4db38bdd4f5d51effbfbdce3d23bc43da2b1d73bd1c19f0d0f0e850c256a4f0e1db96579065a3ef9089eaee7aac[/spoiler]
Но как именно проверить что хэш подписанного контента и сам оригинальный контент идентичен?
www.pki.gov.kz/index.php/ru/forum/7-dlya...odpisanie-fajla-java
тут я пытался декодировать base64 to asn1.