在 python 中创建一系列 RSA Public 密钥
Creating a series of RSA Public Keys in python
所以我想使用 python 中的 RSA 生成器创建一个 RSA public 密钥列表,但我在弄清楚如何去做时遇到了一些问题。到目前为止我有
from Crypto.PublicKey import RSA
key_pair = RSA.generate(2048)
public_key = key.publickey()
print public_key
但到目前为止我发现了两个问题。一个是输出很奇怪,看起来是一个 RSA 对象的形式,我只想要带有一串字母的密钥的长格式版本
其次,如果我运行循环中的这段代码,生成的所有密钥都是相同的。
有谁知道我做错了什么吗?
您可以尝试使用以下代码生成 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
它将为您生成一个 public 密钥,如下所示:
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAp1rxDD3DyFAlZWUZhnT2
IrqXBx+XBgMRWYvOPoyjHwwBK/UlD6JW2cx2lP6TJ/Ljrpiamt35cfjRl8PROy81
hRRrVqa9AMUPcIkQoc9Y6VMxHURluX6AJOkakmszlwJvsHr5smMyG7oW/TpSBpR0
xNPc8lyGfhim8GuNomKaDkc5XhNHP7NWhpvOUbneqffkYExbRQrt1UrEMqRryxGh
Lk2rRB3Gny+iOFJP/AfDN0nxFFBrn32uD+2gDUBaBBta6Ii7+LbdpwUkXZlErFA9
5a7mE6g2Q4k87Pc0XwaxcLxwriejCtXD5cz0RgtkItkcUc/wU1vmnhol9Ncm6XSi
xwIDAQAB
-----END PUBLIC KEY-----
希望对您有所帮助!
第一个问题,您可以拨打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 header 和 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)
所以我想使用 python 中的 RSA 生成器创建一个 RSA public 密钥列表,但我在弄清楚如何去做时遇到了一些问题。到目前为止我有
from Crypto.PublicKey import RSA
key_pair = RSA.generate(2048)
public_key = key.publickey()
print public_key
但到目前为止我发现了两个问题。一个是输出很奇怪,看起来是一个 RSA 对象的形式,我只想要带有一串字母的密钥的长格式版本
其次,如果我运行循环中的这段代码,生成的所有密钥都是相同的。
有谁知道我做错了什么吗?
您可以尝试使用以下代码生成 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
它将为您生成一个 public 密钥,如下所示:
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAp1rxDD3DyFAlZWUZhnT2
IrqXBx+XBgMRWYvOPoyjHwwBK/UlD6JW2cx2lP6TJ/Ljrpiamt35cfjRl8PROy81
hRRrVqa9AMUPcIkQoc9Y6VMxHURluX6AJOkakmszlwJvsHr5smMyG7oW/TpSBpR0
xNPc8lyGfhim8GuNomKaDkc5XhNHP7NWhpvOUbneqffkYExbRQrt1UrEMqRryxGh
Lk2rRB3Gny+iOFJP/AfDN0nxFFBrn32uD+2gDUBaBBta6Ii7+LbdpwUkXZlErFA9
5a7mE6g2Q4k87Pc0XwaxcLxwriejCtXD5cz0RgtkItkcUc/wU1vmnhol9Ncm6XSi
xwIDAQAB
-----END PUBLIC KEY-----
希望对您有所帮助!
第一个问题,您可以拨打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 header 和 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)