#c# #metadata #xmp
#c# #метаданные #xmp
Вопрос:
Я планирую использовать эти обработчики свойств метаданных XMP для хранения моих ключей шифрования, чтобы мои программы могли их прочитать (в целях безопасности). Я немного поработал с файлами PDF, и теперь я пытаюсь добавить поддержку ключа шифрования для изображений и файлов MS Word.
Я использую Aspose Imaging
для преобразования любого изображения в TIFF и добавления к нему пользовательских метаданных, но кажется, что Metadata Extractor
из github https://github.com/drewnoakes/metadata-extractor не могу прочитать то, что я импортировал.
Импорт XMP через Aspose Imaging
:
using (TiffImage image = (TiffImage)Aspose.Imaging.Image.Load(imagepath))
{
XmpHeaderPi xmpHeader = new XmpHeaderPi("Company Metadata");
XmpTrailerPi xmpTrailer = new XmpTrailerPi(true);
XmpMeta xmpMeta = new XmpMeta();
xmpMeta.AddAttribute("Company", "Some Company Inc.");
xmpMeta.AddAttribute("EncryptionKey", cryptography.Encrypt(Guid.NewGuid().ToString(),"somekey"));
XmpPacketWrapper xmpData = new XmpPacketWrapper(xmpHeader, xmpTrailer, xmpMeta);
image.XmpData = xmpData;
image.Save();
}
Результат из MetadataExtractor
Я делаю неправильный способ импорта метаданных? Или есть какие-либо библиотеки, которые могут читать это вместо использования Aspose Imaging для его чтения?
Комментарии:
1. Код выглядит правильным для меня. Если вы уверены, что файл содержит xmp (откройте его в текстовом или шестнадцатеричном редакторе, чтобы проверить), пожалуйста, откройте проблему в проекте GitHub и прикрепите изображение.
2. @DrewNoakes Извините за поздний ответ, похоже, что проблем не возникнет, если вы создадите существующую схему, поддерживаемую библиотекой, вместо пользовательской. Пожалуйста, проверьте мой ответ в этой теме. Спасибо.
Ответ №1:
Наконец-то решил мою проблему, создав Dublin Core Schema
вместо пользовательского XMP. Возможно, идея состоит в том, чтобы создать существующую схему, а затем добавить из нее любые пользовательские значения, такие как обработчики для ключей шифрования. (например. dc:encryptionkey
)
DublinCorePackage dublinCorePackage = new DublinCorePackage();
dublinCorePackage.SetAuthor("AUTHOR_HERE");
dublinCorePackage.SetTitle("Encrypted Image File");
//property handler for the encrypted key
dublinCorePackage.AddValue("dc:encryptionkey", "ENCRYPTION_KEY");
XmpPacketWrapper xmpData = new XmpPacketWrapper(xmpHeader, xmpTrailer, xmpMeta);
// Add dublinCore Package into XMP metadata
xmpData.AddPackage(dublinCorePackage);
Затем используйте Metadata-Extractor
для поиска созданного свойства
private void ReadMetadata(string path)
{
var xmpDirectory = ImageMetadataReader.ReadMetadata(path).OfType<XmpDirectory>()?.FirstOrDefault();
if (xmpDirectory == null) return;
var query = xmpDirectory.XmpMeta.Properties.Where(e => e.Path == "dc:encryptionkey").FirstOrDefault();
if (query != null)
{
var key = query.Value;
var decrypt = cryptography.Decrypt(key, "SOME_KEY");
Console.WriteLine(decrypt);
}
}
Результат отладки: