XNSim/XNSignature/README.md

3.1 KiB

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 语言接口,便于集成
  • 完整的错误处理和资源管理

安全说明

  • 私钥文件应妥善保管,不要泄露给他人
  • 公钥文件可以公开分发
  • 签名文件用于验证文件完整性,防止篡改
  • 建议定期更换密钥对

示例工作流程

  1. 生成密钥对:

    ./xn_keygen
    
  2. 签名重要文件:

    方式一:签名所有文件

    ./XNSignatureSign
    

    方式二:签名指定文件

    ./XNSignatureSign important_document.pdf
    
  3. 分发文件时包含:

    • important_document.pdf (原始文件)
    • important_document.sig (签名文件)
    • public_key.pem (公钥文件)
  4. 接收方验证文件完整性:

    int result = verifySignature("important_document.pdf", "public_key.pem", "important_document.sig");
    if (result == 0) {
        // 文件未被篡改,可以安全使用
    }