1. 课程导学与项目概述:签名验签是什么?为什么需要它?
大家好,欢迎来到《从零实现签名验签工具开发》这门课。
我是这门课的主讲。在正式开始之前,我想先聊聊一个很基础、但很多人其实没搞透的问题:签名验签到底是什么?
说白了,数字签名就是现实世界里「手写签名」的电子版。你在一份合同上签了名,别人一看就知道是你签的,而且你事后不能抵赖。数字签名干的事一模一样——只不过它用的是数学,不是笔和纸。
1.1 一个真实的故事
我记得刚工作那会儿,参与过一个金融系统的对接项目。对方银行要求我们发送的每一条交易报文都必须带签名。我当时想,不就是把数据加密一下嘛,简单。结果呢?上线第一天,对方就报错——签名验证失败。
排查了一整天,最后发现是签名时用的字符编码不一致。我这边用的 UTF-8,对方用的 GBK。就这么一个细节,差点导致项目延期。嗯,从那以后我再也不敢小看签名验签了。
你想想看,如果连编码这种基础问题都能搞出大麻烦,那密钥管理、算法选择、填充模式这些更深的东西呢?所以这门课,我会带着你把这些坑一个一个踩平。
1.2 签名验签的核心逻辑
先看一张图,把整体流程理清楚。
这张图把流程拆成了两半。左边是签名,右边是验签。核心就三步:哈希 → 加密 → 比对。
一句话总结:签名就是用你的私钥给数据的「指纹」加密。验签就是用你的公钥解密,然后比对指纹是否一致。
1.3 为什么需要签名验签?
你可能会问:我直接把数据加密传输不行吗?干嘛非要搞个签名?
好问题。加密解决的是「别人看不懂」,签名解决的是「别人改不了、赖不掉」。这是两码事。
| 安全需求 | 加密 | 签名 |
|---|---|---|
| 机密性(别人看不懂) | ✅ 解决 | ❌ 不解决 |
| 完整性(数据没被改) | ❌ 不解决 | ✅ 解决 |
| 身份认证(是谁发的) | ❌ 不解决 | ✅ 解决 |
| 不可否认性(不能抵赖) | ❌ 不解决 | ✅ 解决 |
我在项目中遇到过好几次这样的情况:对方说「我没发过这条消息」,结果一查签名,私钥只有他有,赖都赖不掉。这就是不可否认性的价值。
1.4 课程目标与最终效果
这门课的目标很明确:从零开始,手写一个能用的签名验签工具。
不是那种「调一下 OpenSSL 命令行就完事」的教程。我们要用 Python 自己实现核心逻辑,包括:
- 密钥生成:RSA 和 ECDSA 两种主流算法
- 签名生成:支持文件签名和文本签名
- 签名验证:支持单签名和多签名批量验证
- 密钥管理:PEM 格式的导入导出
- 图形界面:用 PyQt5 做一个能用的桌面工具
我的建议:别急着看后面的代码。先把今天这张流程图搞明白。哈希、私钥、公钥这三个概念,是后面所有内容的地基。地基不稳,楼盖得再高也得塌。
1.5 你会学到什么
30 章走下来,你收获的不只是代码:
- 密码学基础:哈希函数、非对称加密、数字签名原理
- Python 安全编程:cryptography 库、PEM 格式处理、异常处理
- 工程实践:命令行工具开发、GUI 开发、单元测试
- 避坑经验:编码问题、填充模式、密钥安全存储
注意:这门课讲的是「如何实现签名验签工具」,不是「如何破解签名」。所有代码仅供学习和合法场景使用。别拿去做违法的事,这个锅我不背。
好了,第一章就到这里。内容不多,但都是干货。把这张图刻在脑子里,后面我们就要开始动手写代码了。