# 签名校验 **Repository Path**: Ygwill2022/signature-verification ## Basic Information - **Project Name**: 签名校验 - **Description**: No description available - **Primary Language**: Python - **License**: GPL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-10-05 - **Last Updated**: 2024-10-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Python 公钥私钥生成工具(PKST) ## 什么是 PKST? PKST 是一个简单的Python脚本,用于生成密钥对,并对指定文件进行签名。它支持对数据进行签名和验证签名,确保数据的安全性和完整性。 ## 主要功能 - 生成公钥私钥对 - 对指定文件进行签名并生成JSON格式的签名数据 - 验证签名的有效性 ## 必备依赖 为了运行PKST,你需要以下依赖: - Python环境 - `pycryptodome`第三方库,用于加密操作 > 如果你使用的是1.0.1以上的版本,运行程序时会自动检测是否安装`pycryptodome`并提醒你安装 > 如果你是1.0.2以下的版本,请注意版本是否达到最低版本**3.3.0** ### 安装指南 在你的命令行中运行以下命令来安装`pycryptodome`: > 注意:pycryptodome必须在**3.3.0**以上 - 安装 ``` pip install pycryptodome ``` - 升级 ```bash pip install pycryptodome --upgrade ``` ## 如何使用 > 如果你使用的是1.0.1以上的版本,你可以传入任意参数(甚至可以不传入)来获取帮助 ```bash python key.py ``` ### 生成密钥对 运行脚本时不需要任何参数即可生成密钥对: ```bash python key.py generate ``` 会生成两个文件: - 公钥:`public_key.pem` - 私钥:`private_key.pem` ### 签名文件 签名文件需要两个参数:需要签名的文件路径和包含签名结果的文件路径(JSON格式): ```bash python key.py sign <需要签名的文件> <输出的含有签名结果的文件(json)> ``` 需要一个文件: - (**当前目录下**)`private_key.pem`(私钥)(没有的可以生成一个) 会生成一个文件: - 签名:`output.json` > 提示:输出的签名是JSON格式的,无论你用什么扩展名都可以 > 警告:在1.0.2版本及其后,为了签名的的JSON文件完整性,签名前如果已有与输出文件同名的文件存在,会删除这个文件 > 警告:使用到相对路径(包括多文件签名),请保证校验签名前后文件结构不变。 ``` 当前工作目录 ├ <签名JSON文件> └ <被签名文件> ``` 或 ``` 当前工作目录 ├ <签名JSON文件> ├ 文件夹 ├ ├<被签名文件> ├ └...... └ <被签名文件> ``` 在1.0.2及以上版本中需签名文件较多时会出现进度条。 > 注意:进度条功能依赖于控制台ANSI转移,大多现代的都支持这么做 ### 验证签名 验证签名也需要两个参数:需要验证的文件路径和签名文件路径(JSON格式): ```bash python key.py verify <需验证文件> <签名> ``` > 警告:使用到相对路径(包括多文件签名),请保证文件结构不变。 ``` 当前工作目录 ├ <签名JSON文件> └ <被签名文件> ``` 或 ``` 当前工作目录 ├ <签名JSON文件> ├ 文件夹 ├ ├<被签名文件> ├ └...... └ <被签名文件> ``` 需要一个文件: - (**当前目录下**)`public_key.pem`(公钥)(没有的可以生成一个) ## 警告 1. 请**不要泄露私钥**,因为其他人可能会使用它来假冒你的签名。 2. 各个版本生成的签名数据**可能不互通**。特别是生成密钥对版本和生成文件唯一值版本不一样的,一定不互通。 3. 请勿使用`x.x.x-xxx-MD5`或`x.x.x-xxx-SHA-1`等版本,因为这些版本所依赖的加密算法**已经出现漏洞** ## FAQ 1. 如果我想生成新的密钥对,我应该怎么做? 使用`generate`选项: ```bash python key.py generate ``` 2. 我可以为多个文件生成签名吗? 当前版本只能为单个文件生成签名。 3. 如何验证签名是有效的? 使用`verify`选项: ```bash python key.py verify your_file.txt signature.json ``` 4. 各个版本数据互通吗? 不,基本上不互通。 程序校验签名时会自动检测你的签名版本,如果不同会提醒你。如果你认为当前版本与签名相兼容,你可以继续校验 ## 许可证 本软件遵循GPL-2.0许可证。 ## 版本说明 例如,1.0.0-RSA8192-SHA512 - 主程序版本号:1.0.0 - 生成密钥对的类型:RSA8192 - 生成文件唯一值:SHA512 ## 二次开发相关 ### 原开发环境 - OS:Android 12 Termux - Python: 3.11.10 ### 使用自己的加密算法 你可以通过更改程序中的以下函数来修改加密算法: - `verify_signature`(校验函数) - `sign_data`(加密函数) - `generate_key_pair`(公钥私钥生成函数) - `compute_sha512`(文件唯一值生成函数) ### 签名JSON格式 - 1.0.2前 ```json { "文件/文件相对路径": { "program": "程序主版本", "key": "密钥对生成版本", "file": "文件唯一值生成版本", "signature": "签名数据" } ``` - 1.0.2及以后 使用JSON格式,一个签名JSON文件可能会包含多个签名。 ```json [ { "文件/文件相对路径": { "program": "程序主版本", "key": "密钥对生成版本", "file": "文件唯一值生成版本", "signature": "签名数据" }, ...... ] ``` ### 许可证 本软件遵循GPL-2.0许可证。 ## 发行版签名 - 1.0.2及之前 `public_key.pem` : ``` -----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsHTvXQf7ea1cv3H/2tAx CiEgoVMFWjQlvPxYYR580CvHwVnkGbchjRr6DoTyBYMMm8YmSn6Gl+M9ARCz2mvJ WuSoX8+1rVe2QAMbfT9CKhNPP2ms42SN0Xuk4wf7LTFO7by6Byq7lVCtA7XEpjHD X7B85IAtukHxsiwczz8DC0Nu9Rut8ma7I5Duz+g/fPC3Xis/OjxpEtDms9cLgRIt 9BZNTRVieEq63tsvTf5cRyZM/agMUHC0WgZke+602c2+uzAkzaMzXaAKH7YV3ePx w0T1TlbsUzz68+GKfVytI1vrfnUf9gGNKdoFqqTiJjMeUku50/74sJm0DPOO56q3 CQIDAQAB -----END PUBLIC KEY----- ``` - 1.0.2之后 `public_key.pem` : ``` -----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnMKmo9pHSgRnPDLwV0vl HG54Y0ugx1PtDTalVG9FLdvYa+uX0xcZnPZxjrlZdRRfINlLsDvnhyEN1LxHS2mr 8/+fJ6YDFbw/WBUo6tMp0nFAsvyMtz2/pVyp0C67SB7WMpD6vegjrNDiknBSrorp dkdUsRtfdgIH+iTRGTZ/FCeYG1QMlyyrE8H4E1iwIxCId8lIU0v4tAQe+4sjDDbs JxY2rPBPuM/Y2XRExm2lnn4EzlQrTptSoayN3MVmwl7qmpNKb/lk1xY1HMM52Xsb yytL7dykMhN5C0gFVJaQpfp6Z8dkxr6yndCEtGY/yx/ksBzadbr9qcIGlzRNEsct uwIDAQAB -----END PUBLIC KEY----- ``` ## 联系方式 如果你有任何问题或建议,请随时通过gitee联系作者。 注意:此文件更新于1.0.2版本