问题描述
我打算使用这些 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);
}
}
调试结果: