python-3.x - 将文件中的 openssl 生成的 rsa 公钥与另一个文件中的多个公钥进行比较的最佳方法是什么?
问题描述
我有一个文件A.crt
,里面有一个公钥。我需要比较/检查 A.crt pub 密钥的存在,B.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,但我不确定它是否支持多个密钥。看这里的例子。
推荐阅读
- vim - vim:如何通过匹配第一部分来查找单词,删除第一部分然后在单词末尾添加一个字符串
- php - 为什么 Laravel 不识别关系?调用未定义的方法 Illuminate\Database\Query\Builder::model()
- c# - Ajax 调用控制器从视图中发送对象表单的 html 表
- python - 将 1100 万行从 Postgresql 导入到 Pandas/Python
- java - 获取两个具有重复元素的arraylist之间的区别
- jenkins - 从詹金斯管道发送电子邮件
- python - Python 无法在外部停止协程中的 while 循环
- xcode - XCTestCase 超类方法对子类不可见
- python - 多项式回归坏图
- css - 悬停时,更改其他链接的不透明度