使用 GroupDocs.Signature 在 Java 中实现图像元数据加密签名

介绍

在当今的数字时代,保护文档元数据中的敏感信息至关重要。无论是机密的商业合同还是个人身份照片,维护图像元数据的完整性和真实性有助于防止未经授权的访问和篡改。 GroupDocs.Signature for Java 提供了一个强大的解决方案来安全地签署和加密图像元数据。

本教程将指导您使用 GroupDocs.Signature 的强大功能,在 Java 中实现带加密的图像元数据签名。按照以下步骤操作,您将能够有效地将此功能集成到您的 Java 应用程序中。

您将学到什么:

  • 使用 GroupDocs.Signature for Java 签署文档元数据
  • 使用加密实现自定义对象签名
  • 使用对称密钥加密设置安全环境

先决条件

开始之前,请确保满足以下先决条件:

所需的库和依赖项:

  • GroupDocs.Signature for Java:确保您拥有 23.12 或更高版本。

环境设置要求:

  • 在您的机器上安装 Java 开发工具包 (JDK)。
  • 使用集成开发环境 (IDE),如 IntelliJ IDEA、Eclipse 或 NetBeans。

知识前提:

  • 对 Java 编程有基本的了解。
  • 熟悉 Maven 或 Gradle 的依赖管理。

为 Java 设置 GroupDocs.Signature

要在您的项目中使用 GroupDocs.Signature,请包含以下必要的依赖项:

使用 Maven

将此添加到您的 pom.xml 文件:

<dependency>
    <groupId>com.groupdocs</groupId>
    <artifactId>groupdocs-signature</artifactId>
    <version>23.12</version>
</dependency>

使用 Gradle

将其包含在您的 build.gradle 文件:

implementation 'com.groupdocs:groupdocs-signature:23.12'

直接下载

或者,从下载最新版本 GroupDocs.Signature Java 版本.

许可证获取步骤

  • 免费试用:从试用开始探索功能。
  • 临时执照:如果需要,请申请进行全面测试。
  • 购买:从以下位置获取生产使用许可证 群组文档.

基本初始化和设置

以下是如何在 Java 应用程序中初始化 GroupDocs.Signature:

import com.groupdocs.signature.Signature;

public class InitializeSignature {
    public static void main(String[] args) {
        // 文档路径
        String filePath = "path/to/your/document.jpg";
        
        // 创建签名的新实例
        Signature signature = new Signature(filePath);

        System.out.println("GroupDocs.Signature initialized successfully.");
    }
}

实施指南

功能:自定义对象的元数据签名

概述

此功能允许使用自定义对象签署图像元数据并对其进行加密以增加安全性,确保只有授权方才能访问或修改元数据。

逐步实施

1. 定义文档签名数据类

创建一个类来保存您的元数据信息:

import java.math.BigDecimal;
import java.util.Date;

class DocumentSignatureData {
    private String ID;
    private String Author;
    private Date Signed = new Date();
    private BigDecimal DataFactor = new BigDecimal(0.01);

    public String getID() { return ID; }
    public void setID(String value) { ID = value; }

    @FormatAttribute(propertyName = "SignID")
    public final String getAuthor() { return Author; }
    public final void setAuthor(String value) { Author = value; }

    @FormatAttribute(propertyName = "SAuth")
    public final Date getSigned() { return Signed; }
    public final void setSigned(Date value) { Signed = value; }

    @FormatAttribute(propertyName = "SDate", propertyFormat = "yyyy-MM-dd")
    public final BigDecimal getDataFactor() { return DataFactor; }
    public final void setDataFactor(BigDecimal value) { DataFactor = value; }
}
2. 实现签名逻辑

以下是使用加密对元数据进行签名的方法:

import com.groupdocs.signature.Signature;
import com.groupdocs.signature.domain.extensions.encryption.IDataEncryption;
import com.groupdocs.signature.domain.extensions.encryption.SymmetricAlgorithmType;
import com.groupdocs.signature.domain.extensions.encryption.SymmetricEncryption;
import com.groupdocs.signature.domain.signatures.metadata.ImageMetadataSignature;
import com.groupdocs.signature.exception.GroupDocsSignatureException;
import com.groupdocs.signature.options.sign.MetadataSignOptions;

import java.io.File;
import java.nio.file.Paths;
import java.util.UUID;

public class SignMetadataWithCustomObject {
    // 使用占位符初始化文件路径
    String filePath = "YOUR_DOCUMENT_DIRECTORY/SampleImage.jpg";
    String outputFilePath = new File("YOUR_OUTPUT_DIRECTORY", 
                                       "SignedImageWithCustomMetadata/SampleImage_signed.jpg").getPath();

    public void run() throws Exception {
        Signature signature = new Signature(filePath);

        // 设置加密的密钥和密码
        String key = "1234567890";
        String salt = "1234567890";
        IDataEncryption encryption = new SymmetricEncryption(
            SymmetricAlgorithmType.Rijndael, key, salt);

        MetadataSignOptions options = new MetadataSignOptions();
        DocumentSignatureData documentSignature = new DocumentSignatureData();
        
        // 设置自定义元数据属性
        documentSignature.setID(UUID.randomUUID().toString());
        documentSignature.setAuthor(System.getenv("USERNAME"));
        documentSignature.setSigned(new Date());
        documentSignature.setDataFactor(new BigDecimal("11.22"));

        ImageMetadataSignature mdDocument = new ImageMetadataSignature(41996, documentSignature);
        mdDocument.setDataEncryption(encryption);

        // 向选项添加元数据签名
        options.getSignatures().add(mdDocument);

        signature.sign(outputFilePath, options);
    }
}

关键配置选项

  • 对称加密:利用Rijndael算法进行加密。
  • 元数据签名选项:配置签名过程并指定要签名的元数据。
故障排除提示
  • 确保您的文件路径正确且可访问。
  • 检查环境变量 USERNAME 是否设置正确。
  • 验证 GroupDocs.Signature 库版本是否与您的代码依赖项匹配。

功能:带加密的元数据签名

概述

此功能专注于加密元数据签名以保护图像文件中的敏感信息。

逐步实施

1.实现加密逻辑

以下是使用加密对元数据进行签名的方法:

import com.groupdocs.signature.Signature;
import com.groupdocs.signature.domain.extensions.encryption.IDataEncryption;
import com.groupdocs.signature.domain.extensions.encryption.SymmetricAlgorithmType;
import com.groupdocs.signature.domain.extensions.encryption.SymmetricEncryption;
import com.groupdocs.signature.exception.GroupDocsSignatureException;
import com.groupdocs.signature.options.sign.MetadataSignOptions;

import java.io.File;
import java.nio.file.Paths;
import java.util.UUID;

public class SignMetadataWithEncryption {
    // 使用占位符初始化文件路径
    String filePath = "YOUR_DOCUMENT_DIRECTORY/SampleImage.jpg";
    String outputFilePath = new File("YOUR_OUTPUT_DIRECTORY", 
                                       "SignedImageWithEncryption/SampleImage_signed.jpg").getPath();

    public void run() throws Exception {
        Signature signature = new Signature(filePath);

        // 设置加密的密钥和密码
        String key = "1234567890";
        String salt = "1234567890";
        IDataEncryption encryption = new SymmetricEncryption(
            SymmetricAlgorithmType.Rijndael, key, salt);

        MetadataSignOptions options = new MetadataSignOptions();
        DocumentSignatureData documentSignature = new DocumentSignatureData();
        
        // 设置自定义元数据属性
        documentSignature.setID(UUID.randomUUID().toString());
        documentSignature.setAuthor(System.getenv("USERNAME"));
        documentSignature.setSigned(new Date());
        documentSignature.setDataFactor(new BigDecimal("11.22"));

        ImageMetadataSignature mdDocument = new ImageMetadataSignature(41996, documentSignature);
        mdDocument.setDataEncryption(encryption);

        // 向选项添加元数据签名
        options.getSignatures().add(mdDocument);

        signature.sign(outputFilePath, options);
    }
}