# XNSignature 数字签名工具集 这是一个基于 OpenSSL 的数字签名工具集,包含三个主要组件: ## 项目结构 - **XNSignatureKeygen**: 密钥生成工具(可执行程序) - **XNSignatureSign**: 文件签名工具(可执行程序) - **XNSignatureVerify**: 签名验证库(动态库) ## 编译和安装 ### 依赖要求 - CMake 3.16+ - OpenSSL 开发库 - C++17 编译器 ### 编译步骤 ```bash mkdir build cd build cmake .. make ``` ### 安装 ```bash make install ``` ## 使用方法 ### 1. 生成密钥对 运行密钥生成工具,会在当前目录生成密钥文件: ```bash ./XNSignatureKeygen ``` 这将生成: - `private_key.pem` - 私钥文件 - `public_key.pem` - 公钥文件 ### 2. 为文件创建数字签名 有两种使用方式: #### 方式一:签名所有文件 ```bash ./XNSignatureSign ``` 这将自动签名当前目录下的所有文件(除了密钥文件和已有的签名文件),每个文件会生成对应的 `.sig` 签名文件。 #### 方式二:签名指定文件 ```bash ./XNSignatureSign <文件路径> ``` 示例: ```bash ./XNSignatureSign document.txt ./XNSignatureSign important_file.pdf ``` 签名工具会使用当前目录下的 `private_key.pem` 私钥文件。 ### 3. 验证数字签名 使用验证库验证文件签名: #### C++ 程序中使用 ```cpp #include "XNSignatureVerify.h" // 验证签名 int result = verifySignature("document.txt", "public_key.pem", "document.sig"); if (result == 0) { std::cout << "签名验证成功!" << std::endl; } else if (result == -1) { std::cout << "签名验证失败!" << std::endl; } else { std::cout << "验证过程中发生错误!" << std::endl; } ``` #### 测试验证库 ```bash ./test_verify ``` ## API 函数说明 ### 验证库函数 #### `verifySignature` ```cpp int verifySignature(const char* filePath, const char* publicKeyPath, const char* signaturePath); ``` - **功能**: 验证文件数字签名 - **返回值**: 0=成功, -1=验证失败, -2=其他错误 ## 技术特点 - 使用 RSA-2048 算法进行数字签名 - 采用 SHA256 哈希算法 - 支持 PEM 格式的密钥文件 - 提供 C 语言接口,便于集成 - 完整的错误处理和资源管理 ## 安全说明 - 私钥文件应妥善保管,不要泄露给他人 - 公钥文件可以公开分发 - 签名文件用于验证文件完整性,防止篡改 - 建议定期更换密钥对 ## 示例工作流程 1. 生成密钥对: ```bash ./xn_keygen ``` 2. 签名重要文件: 方式一:签名所有文件 ```bash ./XNSignatureSign ``` 方式二:签名指定文件 ```bash ./XNSignatureSign important_document.pdf ``` 3. 分发文件时包含: - `important_document.pdf` (原始文件) - `important_document.sig` (签名文件) - `public_key.pem` (公钥文件) 4. 接收方验证文件完整性: ```cpp int result = verifySignature("important_document.pdf", "public_key.pem", "important_document.sig"); if (result == 0) { // 文件未被篡改,可以安全使用 } ```