为何Linux下生成的ECDSA签名在Windows系统验证失败?
Linux生成的ECDSA签名文件转移到Windows后验证失败的常见原因
最高发原因:传输模式错误
你用到的文件中,ec.sig是二进制格式,content.txt、ec.key、ec.pubkey是文本格式。如果传输时使用了ASCII模式(比如FTP默认ASCII传输、部分传输工具的自动文本格式转换功能),会自动将Linux下的LF换行符替换为Windows的CRLF换行符,直接导致文件内容被篡改:
- 若
content.txt被修改,其SHA1哈希值会发生变化,签名验证的底层比对直接失败 - 若二进制的
ec.sig被当做文本处理,内部字节会被错误转义,直接造成签名文件损坏
其他可能原因
- 文件读取错误:Windows默认文件名大小写不敏感,若命令中引用的文件名和实际文件大小写不匹配,Linux下可正常读取,Windows下可能读取到错误文件
- OpenSSL版本兼容问题:若Windows侧安装的OpenSSL版本与Linux侧差异过大,可能存在secp192k1曲线参数解析、签名格式处理的兼容性bug
排查步骤
- 校验所有文件的哈希一致性:在Linux和Windows侧分别执行
openssl dgst -sha1 ec.key ec.pubkey ec.sig content.txt,对比两侧输出:- 任意文件哈希不一致的,直接使用二进制模式重新传输所有文件,关闭传输工具的自动换行转换、格式优化功能即可解决
- 所有文件哈希一致的,执行
openssl version对比两侧版本,将Windows侧OpenSSL升级到与Linux侧同版本后重试
内容的提问来源于stack exchange,提问作者Lai Pang
相关产品推荐
相关产品推荐

