在python中创建一系列RSA公钥

时间:2017-03-09 10:21:39

标签: python rsa

所以我想在python中使用RSA生成器创建一个RSA公钥列表,但是我有一些问题要弄清楚如何去做。到目前为止我已经

from Crypto.PublicKey import RSA
key_pair = RSA.generate(2048)
public_key = key.publickey()
print public_key

但到目前为止,我看到了两个问题。一个是输出是奇数,看起来和RSA对象的形式,我只想要一串字母的长版本的密钥

其次,如果我在循环中运行此代码,则生成的所有密钥都是相同的。

有谁知道我做错了什么?

2 个答案:

答案 0 :(得分:2)

解决第一个问题,您可以致电public_key.exportKey()

>>> from Crypto.PublicKey import RSA
>>> key_pair = RSA.generate(2048)
>>> public_key = key_pair.publickey()

>>> print(public_key.exportKey())
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoGX9PTzmX+2AwMIhUunN
BUVPRpFFg63bLORKHEgHDW0RntE5u0yPB64Th4+zVas9yQBLhK+v2O6K4gyLOaT5
lQNF5KHQE3l/j6kInLIm73nMhdNJDpoV1cVUgTnuXoAEcTQXwYFf5ME/1/N4txIO
Toi1Z5T5eeVk2SXICdFL47l2vPpcVFmrNGZ16QrZDpVIo3aTmIllbwpm/YPsoLta
U3rcaMkEIar6y1iVEYVZCydN56YH4LDUpT7iGNFYAqgYGUkKHK/h7QATN21HAi/y
a51jrCOBCLCklcGU7/6x+2M5KhMbRRAN2/h1AH+CFdZ140Ml5a5mX+k2QPuplKwk
cwIDAQAB
-----END PUBLIC KEY-----

您可以通过拆分输出并取内线来剥离BEGIN标题和END预告片:

>>> exported_key = public_key.exportKey().splitlines()[1:-1]
>>> print('\n'.join(exported_key))
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoGX9PTzmX+2AwMIhUunN
BUVPRpFFg63bLORKHEgHDW0RntE5u0yPB64Th4+zVas9yQBLhK+v2O6K4gyLOaT5
lQNF5KHQE3l/j6kInLIm73nMhdNJDpoV1cVUgTnuXoAEcTQXwYFf5ME/1/N4txIO
Toi1Z5T5eeVk2SXICdFL47l2vPpcVFmrNGZ16QrZDpVIo3aTmIllbwpm/YPsoLta
U3rcaMkEIar6y1iVEYVZCydN56YH4LDUpT7iGNFYAqgYGUkKHK/h7QATN21HAi/y
a51jrCOBCLCklcGU7/6x+2M5KhMbRRAN2/h1AH+CFdZ140Ml5a5mX+k2QPuplKwk
cwIDAQAB

我无法复制第二个问题。每次调用RSA.generate()时都会生成一个新密钥对:

pub_keys = set()
for i in range(5):
    k = RSA.generate(2048).publickey().exportKey()
    assert k not in pub_keys
    pub_keys.add(k)

答案 1 :(得分:0)

您可以尝试以下代码以PEM格式生成指数为65537的RSA密钥对。

from Crypto.PublicKey import RSA
new_key = RSA.generate(2048, e=65537)
public_key = new_key.publickey().exportKey("PEM")
print public_key

它将为您生成一个公钥,如下所示:

-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAp1rxDD3DyFAlZWUZhnT2
IrqXBx+XBgMRWYvOPoyjHwwBK/UlD6JW2cx2lP6TJ/Ljrpiamt35cfjRl8PROy81
hRRrVqa9AMUPcIkQoc9Y6VMxHURluX6AJOkakmszlwJvsHr5smMyG7oW/TpSBpR0
xNPc8lyGfhim8GuNomKaDkc5XhNHP7NWhpvOUbneqffkYExbRQrt1UrEMqRryxGh
Lk2rRB3Gny+iOFJP/AfDN0nxFFBrn32uD+2gDUBaBBta6Ii7+LbdpwUkXZlErFA9
5a7mE6g2Q4k87Pc0XwaxcLxwriejCtXD5cz0RgtkItkcUc/wU1vmnhol9Ncm6XSi
xwIDAQAB
-----END PUBLIC KEY-----

希望它有所帮助!