python中的DiffieHellman加密方案

2024-06-06 17:24:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我用24个单词的助记符为Alice生成了pub/priv主密钥对。在

master_private_key='9f74f4534cbdf01a1f925e20108d86045bd96849af9c94534a10ef2a26ff133b',
master_public_key="0308de0952b00ebc83a41830794534ae912b86d3718832a36ce98c256ab5bfdc4e"

mnemonic='flash city relief spirit federal own metal history great hello toy volcano same subway loan bleak rapid swamp pigeon secret pyramid spoon famous blouse',

类似地,我重复了为Bob生成密钥的相同过程。现在我想从Alice的私钥和Bob的公钥生成Diffie Hellman密钥。python中Diffie-Hellman的所有实现都生成自己的公钥/私钥对。在

来自secp256k1 python documentation

^{pr2}$

注意:ecdh只能在secp256k1c库编译时使用。如果没有支持,则调用它时将引发异常。在

我只是不知道如何用libsecp256k1编译这个库。我认为Diffie Hellman ECC版本更适合这里。在

这是我得到的错误:

from sawtooth_signing.secp256k1 import Secp256k1PublicKey
bob_pub='033036dd96b7bef82556fe09eef42bef5e66545317c92a5deca99275f616729fef'
 public_key = Secp256k1PublicKey.from_hex(bob_pub)

 public_key.secp256k1_public_key.ecdh(alice_private_key)
 ----------------------
  Exception                                 Traceback (most recent call last)
 <ipython-input-4-5175cf593934> in <module>()
----> 1 public_key.secp256k1_public_key.ecdh("dsds")

~/SawtoothClient/SawtoothClient/lib/python3.6/site-packages/secp256k1-0.13.2-py3.6-linux-x86_64.egg/secp256k1/__init__.py in ecdh(self, scalar)
 305         assert self.public_key, "No public key defined"
306         if not HAS_ECDH:
--> 307             raise Exception("secp256k1_ecdh not enabled")
308         if not isinstance(scalar, bytes) or len(scalar) != 32:
309             raise TypeError('scalar must be composed of 32 bytes')

异常:secp256k1_ecdh未启用

我已尝试安装https://github.com/bitcoin-core/secp256k1,按照说明进行了安装,结果显示:

Libraries have been installed in:
/usr/local/lib

现在,当我再次尝试用python3.6安装secp256k1时,正如他们在git页面上提到的那样:

INCLUDE_DIR=include/ LIB_DIR=/usr/local/lib pip install --no-binary secp256k1,

我得到这个错误:

ERROR: You must give at least one requirement to install (see "pip help install")

Tags: installkeyinmasterlib密钥notpublic
1条回答
网友
1楼 · 发布于 2024-06-06 17:24:52

我用另一个库coincurve做的。在

import coincurve   
alice_priv = "29307c4354b7d9d311d2cec4878c0de56c93a921d300273c19577e9004de3c9f"

alice_pub = "02f3c25355c29f64ea8e9b4e11b583ac0a7d0d8235f156cffec2b73e5756aab206"

bob_pub = "03a1db8e8b047e1350958a55e0a853151d0e1f685fa5cf3772e01bccc5aa5cb2eb"

bob_priv = "4138d1b6dde34f81c38cef2630429e85847dd5b70508e37f53c844f66f19f983"

alice_coin_priv =  coincurve.PrivateKey.from_hex(alice_priv)

bob_coin_priv = coincurve.PrivateKey.from_hex(bob_priv)

binascii.hexlify(alice_coin_priv.ecdh(bob_coin_priv.public_key.public_key))

十六进制编码的共享机密是

^{pr2}$

核查工作

bob_coin_priv.ecdh(alice_coin_priv.public_key.public_key)==  alice_coin_priv.ecdh(bob_coin_priv.public_key.public_key)

相关问题 更多 >