You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从ECDSA签名推导消息与公钥?求PHP/在线测试方案

ECDSA签名逆向问题解答

核心结论

仅通过ECDSA签名值无法直接推导原始消息和公钥。原因在于ECDSA签名是私钥对消息哈希值的加密结果,签名仅包含r和s两个参数,这两个参数无法反向唯一确定对应的消息原文和公钥——存在大量不同的消息-公钥组合都能生成相同的签名(虽然概率极低,但从密码学逻辑上不具备唯一性)。

工具与实现说明

在线工具

不存在仅通过ECDSA签名就能还原消息和公钥的在线工具,所有ECDSA相关工具都需要至少一个额外输入项(比如已知公钥验证消息,或已知消息匹配公钥)。

PHP实现方案

PHP中常用openssl扩展处理ECDSA操作,但同样无法仅从签名逆向出消息和公钥。以下是仅能解析签名结构(提取r和s值)的测试用代码:

<?php
// 你的Base64编码签名
$signatureBase64 = 'MEUCIH+9yjWRCSWYVW1Tk6hLE91iR8NiVetvz17C3k6ZTJo8AiEAiHe6OK7iyxjUVjpU5RKZjgXgWYP5LjdFsoE5GTB4cIA=';
// 解码为二进制
$signatureBin = base64_decode($signatureBase64);

// 解析ASN.1格式的签名(ECDSA签名通常用ASN.1 DER编码)
$asn1 = openssl_asn1_parse($signatureBin);
if ($asn1 === false) {
    die('无法解析签名');
}

// 提取r和s值(十六进制格式)
$r = bin2hex($asn1['children'][0]['content']);
$s = bin2hex($asn1['children'][1]['content']);

echo "签名解析出的r值: {$r}\n";
echo "签名解析出的s值: {$s}\n";
?>

注意:这段代码仅能解析签名的结构参数,无法得到你需要的消息和公钥。

补充提示

如果想要验证签名对应的消息或公钥,你必须补充以下其中一项信息:

  • 已知原始消息,尝试匹配可能的公钥(但效率极低,不具备实操性)
  • 已知公钥,验证某条消息是否对应该签名

内容的提问来源于stack exchange,提问作者MK Said

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 15:39:37