Я пишу приложение WPF C#, где я вставляю страницу 'header' в качестве первой страницы пакета PDF-документов. Страница заголовка берется с первой страницы первого PDF-файла в пакете.Возврат SHA256 хэша страницы PDF
Пользователь будет инициировать этот процесс, но я хочу убедиться, что на более позднем этапе пользователь не сможет снова запустить этот процесс, что приведет к вставке другого заголовка.
Итак, мой план состоит в том, чтобы получить хэш SHA256 на странице заголовка и сравнить его с хэшами первой страницы других PDF-файлов. Если они совпадают, то первая страница будет такой же, как и заголовок, если мы не вставим заголовок.
Я выполнил код ниже, чтобы проверить получение первой страницы в формате pdf, но хэш отличается при каждом запуске.
Почему каждый раз?
Благодаря
using System.IO;
using System.Text;
using System.Security.Cryptography;
using PdfSharp.Pdf;
using PdfSharp.Pdf.IO;
namespace Syncada
{
public class PDFDoc
{
private PdfDocument pdfDoc;
public PDFDoc(string path)
{
pdfDoc = PdfReader.Open(path,PdfDocumentOpenMode.Import);
}
public string GetPageOneHash()
{
byte[] hash;
PdfPage page = pdfDoc.Pages[0];
using (MemoryStream stream = new MemoryStream())
{
PdfDocument doc = new PdfDocument();
doc.AddPage(page);
doc.Save(stream,false);
SHA256 sha256 = SHA256.Create();
hash = sha256.ComputeHash(stream);
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < hash.Length; i++)
{
sb.Append(hash[i].ToString("X2"));
}
return sb.ToString();
}
}
}
Спасибо всем за ваши ответы. Я вывожу PDF в файл и сравниваю с шестнадцатеричным просмотром, и действительно «CreationDate» в заголовке и «ID» в трейлере содержит разные значения каждый раз. – chazjn