C #: экстрактору метаданных не удается прочитать XMP, созданный из Aspose Imaging

#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);
        }

    }
 

Результат отладки:

введите описание изображения здесь