pyDHE:一个完整的PythonDiffie-Hellman库
"今日给大伙儿详细介绍这款全名是pyDHE的GitHub开源项目,它是1个选用Python开发设计的详细的Diffie-Hellman库,有必须的同学们能够试着应用或是奉献自个的编码。
pyDHE
pyDHE是这款选用Python語言开发设计的专用工具,它详细地建立了Diffie-Hellman优化算法。这个专用工具不但应用起來比较简单,并且它可以让开发者用十分简约的方式去应用Diffie-Hellman,因而我也能够将自个的活力放到别的更关键的地区干了(比如建立真实的加密算法)。
在此之前的多次开发设计全过程中,我必须应用1个建立了Diffie-Hellman-Ephemeral(DHE)的Python库,可是我找了一上午都找不着。我觉得这一优化算法的建立自身并多难,可是我居然找不着制好的库,这就要我很惊讶了。并且像pyCrypto、pyCryptodome和cryptography这类知名的Python数据加密库都注数了Diffie-Hellman。于是乎,我也准备自个写1个Python库来建立Diffie-Hellman优化算法。
专用工具安裝
pyDHE的安裝全过程比较简单,你能立即在PyPi上获得pyDHE,或根据运作pip指令进行安裝:
pip install pyDHE
专用工具应用
pyDHE的应用我觉得比较简单。它关键有二种方式:即手动式方式和商议方式。但不论哪这种方式,其回到的密匙长短都十分长。当你必须的是1个字符串,下边这好多个涵数或许就是你必须采用的,置于应用哪1个,全看你自个的挑选了:
1. struct.pack()
2. Crypto.Util.number.long_To_bytes()
3. 一切接纳长整形美容(bigInt)的哈希算法
在手动式方式下,你能启用update()和getPublicKey()涵数。统计数据的传送想要你自个处理,而手动式方式下将容许你对总流量开展详细操纵、对套接字开展配备、或挑选你要应用的传送方式(udp协议、IPC或别的)
下边得出的是手动式方式下的参照样版(当地应用样例,不涉及到套接字):
import pyDHE
Alice = pyDHE.new()
Bob = pyDHE.new()
aliceFinal = Alice.update(Bob.getPublicKey())
bobFinal = Bob.update(Alice.getPublicKey())
(aliceFinal == bobFinal)
True
如同你所闻,每1个案例必需启用update()方式,并传送1个公共性密匙,传送公共性密匙的方式由你自个挑选,因此我还称作手动式方式。
针对大部分手机应用程序,人们我觉得只不过应用手动式方式,人们能够立即挑选商议方式negotiate():
import socket import pyDHE
sock = socket.socket()
sock.connect(('localhost', 1234))
alice = pyDHE.new(16)
key= alice.negotiate(sock)
全部应用全过程十分的简易:
1. 建立1个新的tcp套接字,随后进行联接。
2. 启用x = pyDHE.new()
3. 启用 x.negotiate(sock)
11. 拿下!
常见问题:
1. update()方式将会回到最后的密匙,但当你沒有储存出来或你要必须应用它得话,你能立即启用getFinalKey()方式。
2. update()方式将会被启用数次,这将容许你建立出多方面密匙。可是该作用都还没开展详细的检测,因此应用起來会有必须的风险性。
许可证书协议书
因为加密算法是十分关键的,因此所有人都应当应用健硕的加密算法。我公布的这一新项目遵照BSD许可证书协议书,要是是之前得话我能挑选应用GPL v3,但以便要保证这一新项目到一切地区能够立即应用,因此我挑选了BSD许可证书。
相关文章
- 4条评论
- 夙世南戈2022-05-29 17:51:10
- e-Hellman,因而我也能够将自个的活力放到别的更关键的地区干了(比如建立真实的加密算法)。在此之前的多次开发设计全过程中,我必须应用1个建立了Diffie-Hellman-Ephemeral(
- 晴枙羁拥2022-05-29 16:07:07
- ob.update(Alice.getPublicKey()) (aliceFinal == bobFinal)True如同你所闻,每1个案例必需启用update()方式,并传送1个公共性密匙,传送公共性密匙的方式由你自个挑选,因
- 馥妴秙暔2022-05-29 08:38:31
- 用哪1个,全看你自个的挑选了:1. struct.pack()2. Crypto.
- 瑰颈月棠2022-05-29 12:20:46
- Key()) bobFinal = Bob.update(Alice.getPublicKey()) (aliceFinal == bobFinal)True如同你所闻,每