如何在django model / sqlite db中存储rsa密钥对

时间:2013-04-25 13:41:11

标签: django sqlite pycrypto

我在Django中使用PyCrypto(Python 2.7,Django 1.5m SQLite),我想创建一个存储RSAkey对象的字段。我怎样才能做到这一点?转换为字符串并返回似乎很容易出错,因为随机字节在那里,我不相信这是一个好方法。 我能够通过base-64编码将char中的随机密钥存储在charfield中(如下所示:Random.new()。read(16).encode('base64'))。但是一对钥匙? 我在Django的当前开发版本中看到,结合了二进制字段,但我们需要坚持1.5。

真的很感激任何帮助。

由于 格尔德

1 个答案:

答案 0 :(得分:5)

您只需要存储私钥,因为您始终可以从私有密钥生成公钥。

>>> from Crypto.PublicKey import RSA
>>> RSAkey = RSA.generate(1024)

可以使用

导出公钥
>>> RSAkey.publickey().exportKey()

要保存私钥,您可能希望将其转换为使用exportKey()方法的文本并将其存储在django-TextField中:

>>> RSAkey.exportKey()
'-----BEGIN RSA PRIVATE KEY-----\nMI...-----END'

将文本转换回RSA密钥对象也很容易:

>>> RSA.importKey('-----BEGIN RSA PRIVATE KEY--- ....')

获得一个RSAobj,就像我最初生成的一样。

如果您打算在其他区域使用该功能,您也可以通过创建自己的模型字段类来尝试“艰难的方式”。见https://docs.djangoproject.com/en/1.5/howto/custom-model-fields/