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