如何解决将文件中的 openssl 生成的 rsa 公钥与另一个文件中的多个公钥进行比较的最佳方法是什么?
我有一个文件 A.crt
,其中有一个公钥。我需要比较/检查 B.crt
中是否存在 A.crt 公钥,这是一个具有多个公钥的合并文件。
A.crt
-----BEGIN PUBLIC KEY-----
AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-----END PUBLIC KEY-----
B.crt
-----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 中。 - 尝试使用正则表达式拆分字符串 [我不成功]
(-----BEGIN PUBLIC KEY-----.*-----END PUBLIC KEY-----)
- 比较 VarB 中是否存在 Vara 并将其删除。
解决方法
你可以像这样写一个简单的解析器来像这样读取所有的公钥
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,但我不确定它是否支持多个密钥。参见示例 here。
请注意 openssl
有 propper methods 来查找文件中的键。但是,如果您想对此进行硬编码并删除原始文件中的密钥,这将是您计划中第 3 步的方法:
def subscribe_key(old_file,new_file):
with open(old_file,'w') as key_file:
for line in new_file:
key_file.write(line)
def check_key(key,file):
with open(file,'r') as key_file:
varB = key_file.readlines() # read file
for index,line in enumerate(varB):
if line.strip() == '-----BEGIN RSA PRIVATE KEY-----':
cur_idx = index
cur_key = '' # start to mount key
elif line.strip() == '-----END RSA PRIVATE KEY-----':
if key == cur_key: # compare keys
del varB[cur_idx:(index + 1)]
subscribe_key(file,varB) # subscribe old file
return True
else:
cur_key += line.strip() # append strings to mount key
return False
print(check_key(varA,"B.crt"))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。