XNSim/XNSignature/README.md

165 lines
3.1 KiB
Markdown
Raw Normal View History

# 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) {
// 文件未被篡改,可以安全使用
}
```