Я пытаюсь проверить документ в формате pdf, подписанный цифровым способом, с помощью Adobe Acrobat v2019.008.
В поле «Содержание» файла pdf мне удалось получить открытый ключ и зашифрованныйхэш.Благодаря этому я смог сгенерировать дешифрованный хеш с помощью rsa key.decryptPublic
, назовем его h1.
Затем, используя поле 'ByteRange', я обрезал документ PDF и сгенерировалхеш с использованием SHA256, но значение отличается от h1.
Я пытался сгенерировать хеш, используя содержимое в формате utf-8 и hex, но в обоих случаях у меня было другое значение, чемh1.
Как мне обработать документ PDF, чтобы получить ровно h1?Может ли это быть связано с особым процессом, выполняемым Adobe Acrobat?
Большое спасибо!
fs.readFile('./pdf-test/dummy.pdf', (err, data) => {
const pdfString = data.toString();
const byteRange = getByteRange(pdfString);
const content = getContent(pdfString);
const dataHex = data.toString('hex');
const pdfHex = dataHex.substr(byteRange[0] * 2, byteRange[1] * 2) + dataHex.substr(byteRange[2] * 2, byteRange[3] * 2);
const hashPdf = sha256(pdfHex);
console.log('hashPdf', hashPdf);
console.log('hex', sha256(pdfHex));
console.log('utf8', sha256(Buffer.from(pdfHex, 'hex').toString('utf8')));
const publicKey = getPublicKey(content);
const encryptedHash = getEncryptedHash(content);
const key = new NodeRSA(publicKey);
const decrypted = key.decryptPublic(encryptedHash, 'hex');
const hash = decrypted.substr(decrypted.length - 64);
console.log('hash', hash);
});