小编Pra*_*B V的帖子

python ECDSA 和 C micro-ecc 库之间的 ECDSA 签名和验证问题

当我执行以下操作时,我遇到问题:

  1. 使用 python 创建 ECDSA SECP256k1 曲线的公钥对并将其打印在终端上。
  2. 将密钥对复制粘贴到 Python 脚本和 Visual Studio 中(使用 micro-ecc 库的 C 编码)。因此,每次运行代码时都不会生成新密钥。
  3. 使用私钥在 Python 中签署消息(“Hello”),并在终端上打印签名和消息。我知道必须首先使用标准哈希算法(例如 SHA256)对消息进行哈希处理,但在本例中,我直接使用消息进行签名。
  4. 将签名和相同的消息(哈希)复制到 Visual Studio 中。
  5. 当我在 Visual Studio 中调用验证 API 时,尽管使用相同的公钥、消息、签名和曲线,验证还是失败了。

我正在使用的库:

  1. Visual Studio 中用于 C 的 micro-ecc https://github.com/kmackay/micro-ecc
  2. 用于 python 的 ECDSA https://github.com/warner/python-ecdsa

我已经测试并确保的其他事情:

  1. 对于相同的密钥对(例如(sk,vk)),在 python 中进行签名和验证都可以正常工作。
  2. 对于相同的密钥对(例如(sk,vk)),在 Visual Studio 中进行签名和验证都可以正常工作。
  3. 在 Visual Studio 中使用 microECC 进行签名并在 python 中使用 ECDSA 进行验证失败,使用 ECDSA 进行签名并在 python 中使用 microECC 进行验证也失败。
  4. 我确信从终端粘贴的密钥复制实际上是预期的密钥,因为我已经从复制的签名密钥中交叉验证了验证密钥并且它是匹配的。

首先,我通过运行此脚本生成密钥

生成密钥.py

import ecdsa
from ecdsa import SigningKey, SECP256k1


sk  = …
Run Code Online (Sandbox Code Playgroud)

c python cryptography public-key-encryption ecdsa

3
推荐指数
1
解决办法
4015
查看次数

标签 统计

c ×1

cryptography ×1

ecdsa ×1

public-key-encryption ×1

python ×1