Как происходит процесс шифрования с сертификатами Adobe Acrobat? - PullRequest
0 голосов
/ 20 декабря 2018

Я пытаюсь проверить документ в формате 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);
});
...