繁体   English   中英

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

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

我计划使用这些 XMP 元数据属性处理程序来存储我的加密密钥,以便我的程序读取它(出于安全目的)。 我在 PDF 文件上做了一些工作,现在我正在尝试为图像和 MS Word 文件添加加密密钥支持。

我正在使用Aspose Imaging将任何图像转换为 TIFF 并向其添加自定义元数据,但 github https://github.com/drewnoakes/metadata-extractorMetadata Extractor似乎无法读取我导入的内容。

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

              
            }

MetadataExtractor提取器的结果

在此处输入图像描述

我是否以错误的方式导入元数据? 或者是否有任何库可以读取它而不是使用 Aspose Imaging 来读取它?

最后通过创建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);
        }

    }

调试结果:

在此处输入图像描述

暂无
暂无

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

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