[英]C#: Metadata-Extractor cannot read the XMP created from Aspose Imaging
我计划使用这些 XMP 元数据属性处理程序来存储我的加密密钥,以便我的程序读取它(出于安全目的)。 我在 PDF 文件上做了一些工作,现在我正在尝试为图像和 MS Word 文件添加加密密钥支持。
我正在使用Aspose Imaging
将任何图像转换为 TIFF 并向其添加自定义元数据,但 github https://github.com/drewnoakes/metadata-extractor的Metadata 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.