今天给大家介绍一款名叫pyDHE的GitHub开源项目,这是一个采用Python开发的完整的Diffie-Hellman库,有需要的同学可以尝试使用或者贡献自己的代码。
pyDHE
pyDHE是一款采用Python语言开发的工具,它完整地实现了Diffie-Hellman算法。这款工具不仅使用起来非常简单,而且它还可以让开发人员用非常简洁的方法去使用Diffie-Hellman,因此你就可以将自己的精力放在其他更重要的地方上了(例如实现真正的加密算法)。
在此之前的一次开发过程中,我需要使用一个实现了Diffie-Hellman-Ephemeral(DHE)的Python库,但是我找了半天都找不到。其实这个算法的实现本身并不难,但是我竟然找不到现成的库,这就让我很吃惊了。而且像pyCrypto、pyCryptodome和cryptography这种著名的Python加密库都遗漏了Diffie-Hellman。于是乎,我就打算自己写一个Python库来实现Diffie-Hellman算法。
工具安装
pyDHE的安装过程非常简单,你可以直接在PyPi上获取pyDHE,或通过运行pip命令完成安装:pip install pyDHE
工具使用
pyDHE的使用其实非常简单。它主要有两种模式:即手动模式和协商模式。但无论哪一种模式,其返回的密钥长度都非常长。如果你需要的是一个字符串,下面这几个函数也许是你需要用到的,至于使用哪一个,就看你自己的选择了: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
正如你所见,每一个实例必须调用update()方法,并传递一个公共密钥,传递公共密钥的方法由你自己选择,所以我才称之为手动模式。
对于大多数应用程序,我们其实并不需要使用手动模式,我们可以直接选择协商模式negotiate():import socket
import pyDHE
sock = socket.socket()
sock.connect(('localhost', 1234))
alice = pyDHE.new(18)
key= alice.negotiate(sock)
整个使用过程非常的简单:1. 创建一个新的tcp套接字,然后完成连接。
2. 调用x = pyDHE.new()
3. 调用 x.negotiate(sock)
4. 搞定!
注意事项:
1. update()方法将会返回最终的密钥,但如果你没有保存下来或你还需要使用它的话,你可以直接调用getFinalKey()方法。
2. update()方法将会被调用多次,这将允许你创建出多方密钥。但是该功能还没有进行完整的测试,所以使用起来会有一定的风险。
许可证协议
由于加密算法是非常重要的,所以任何人都应该使用健壮的加密算法。我发布的这个项目遵循BSD许可证协议,如果是以前的话我会选择使用GPL v3,但为了要确保这个项目到任何地方都可以直接使用,所以我选择了BSD许可证。
* 参考来源:pyDHE, FB小编Alpha_h4ck编译,转载请注明来自FreeBuf.COM