简体   繁体   English

C#:元数据提取器无法读取从 Aspose Imaging 创建的 XMP

[英]C#: Metadata-Extractor cannot read the XMP created from Aspose Imaging

I'm planning to use these XMP Metadata property handlers to store my encryption keys in order for my programs to read it (for security purposes).我计划使用这些 XMP 元数据属性处理程序来存储我的加密密钥,以便我的程序读取它(出于安全目的)。 I've done some on PDF Files and now I'm trying to add an encryption key support for Images and MS Word Files.我在 PDF 文件上做了一些工作,现在我正在尝试为图像和 MS Word 文件添加加密密钥支持。

I'm using Aspose Imaging to convert any image to TIFF and add custom metadata to it but it seems that Metadata Extractor from github https://github.com/drewnoakes/metadata-extractor cannot read what I've imported.我正在使用Aspose Imaging将任何图像转换为 TIFF 并向其添加自定义元数据,但 github https://github.com/drewnoakes/metadata-extractorMetadata Extractor似乎无法读取我导入的内容。

Importing XMP via Aspose Imaging :通过Aspose Imaging导入 XMP:

            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();

              
            }

Result from MetadataExtractor MetadataExtractor提取器的结果

在此处输入图像描述

Am I doing the wrong way to import metadata?我是否以错误的方式导入元数据? Or is there any libraries that can read this instead of using Aspose Imaging to read it?或者是否有任何库可以读取它而不是使用 Aspose Imaging 来读取它?

Finally solved my problem by creating a Dublin Core Schema instead of Custom XMP.最后通过创建Dublin Core Schema而不是自定义 XMP 解决了我的问题。 Maybe the idea is to create an existing schema then add any custom values from it like handlers for encryption keys.也许这个想法是创建一个现有模式,然后从中添加任何自定义值,例如加密密钥的处理程序。 (ex. dc:encryptionkey ) (例如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);

Then use Metadata-Extractor to search the property created然后使用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);
        }

    }

Debug Result:调试结果:

在此处输入图像描述

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM