Python 3.x 将一个文件中的openssl生成的rsa公钥与另一个文件中的多个公钥进行比较的最佳方法是什么?
我有一个文件Python 3.x 将一个文件中的openssl生成的rsa公钥与另一个文件中的多个公钥进行比较的最佳方法是什么?,python-3.x,pki,Python 3.x,Pki,我有一个文件a.crt,其中有一个公钥。我需要比较/检查B.crt中是否存在A.crt pub键,这是一个包含多个公钥的合并文件 A.crt -----BEGIN PUBLIC KEY----- AAAAAAAAAAAAAAAAAAAAAAAAAAAAA -----END PUBLIC KEY----- -----BEGIN PUBLIC KEY----- AAAAAAAAAAAAAAAAAAAAAAAAAAAAA -----END PUBLIC KEY----- -----BEGIN PUB
a.crt
,其中有一个公钥。我需要比较/检查B.crt
中是否存在A.crt pub键,这是一个包含多个公钥的合并文件
A.crt
-----BEGIN PUBLIC KEY-----
AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-----END PUBLIC KEY-----
-----BEGIN PUBLIC KEY-----
AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-----END PUBLIC KEY-----
-----BEGIN PUBLIC KEY-----
BBBBBBBBBBBBBBBBBBBBBBBBBBBBB
-----END PUBLIC KEY-----
-----BEGIN PUBLIC KEY-----
CCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-----END PUBLIC KEY-----
B.crt
-----BEGIN PUBLIC KEY-----
AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-----END PUBLIC KEY-----
-----BEGIN PUBLIC KEY-----
AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-----END PUBLIC KEY-----
-----BEGIN PUBLIC KEY-----
BBBBBBBBBBBBBBBBBBBBBBBBBBBBB
-----END PUBLIC KEY-----
-----BEGIN PUBLIC KEY-----
CCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-----END PUBLIC KEY-----
用例:
我们希望在python中实现一个密钥轮换脚本,该脚本从提供给服务器的合并公钥文件中删除过时的公钥
计划
A.crt
文件加载到varA中B.crt
文件加载到varB中(----开始公钥------.*----结束公钥------)
请建议该方法是否合适或其他更好的处理方法。您可以编写这样一个简单的解析器来读取这样的所有公钥
import io
txt = '''-----BEGIN PUBLIC KEY-----
AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-----END PUBLIC KEY-----
-----BEGIN PUBLIC KEY-----
BBBBBBBBBBBBBBBBBBBBBBBBBBBBB
-----END PUBLIC KEY-----
-----BEGIN PUBLIC KEY-----
CCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-----END PUBLIC KEY-----'''
start_str = '-----BEGIN PUBLIC KEY-----'
stop_str = '-----END PUBLIC KEY-----'
pk = []
found = False
with io.StringIO(txt) as f: # can be replaced by with open(file, 'r') as f
for line in f:
line = line.strip()
if line == start_str:
found = True
continue
if line == stop_str:
found = False
continue
if found and line:
pk.append(line)
print(pk) # --> ['AAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 'BBBBBBBBBBBBBBBBBBBBBBBBBBBBB', 'CCCCCCCCCCCCCCCCCCCCCCCCCCCCC']
您也可以使用
crypto
库来读取RSA,但我不确定它是否支持多个密钥。参见示例。请注意,openssl
必须在文件中查找密钥。但如果您想硬编码此项,并删除原始文件中的密钥,这将是我在您的计划中执行步骤3的方法:
def订阅密钥(旧文件、新文件):
打开(旧的_文件,'w')作为密钥_文件:
对于新文件中的行:
key_file.write(行)
def检查密钥(密钥,文件):
打开(文件“r”)作为密钥文件:
varB=key_file.readlines()#读取文件
对于索引,枚举中的行(varB):
如果line.strip()='----开始RSA私钥------':
cur_idx=索引
cur_key=''开始挂载key
elif line.strip()='----结束RSA私钥------':
如果键==当前键:#比较键
del varB[cur_idx:(索引+1)]
订阅密钥(文件,varB)#订阅旧文件
返回真值
其他:
cur_key+=line.strip()#将字符串附加到mount key
返回错误
打印(检查键(varA,“B.crt”))
如果文件按行分割,则不需要使用正则表达式。只要用一个键在每一行上循环,并检查varA是否匹配它。@ArthurPereiraB.crt
是一个多行文件,其中每个键也是多行的。我试过使用分割线,但不起作用。