首页 > 解决方案 > 将文件中的 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 中实现一个密钥轮换脚本,该脚本从提供给服务器的整合公钥文件中删除过时的公钥。

计划

  1. 将文件加载A.crt到 varA 中。
  2. 将文件加载B.crt到 varB 中。
  3. 尝试使用正则表达式拆分字符串 [我不成功] (-----BEGIN PUBLIC KEY-----.*-----END PUBLIC KEY-----)
  4. 比较 VarB 中 VarA 的存在并将其删除。

请建议该方法是否可行或任何其他更好的方法来处理此问题。

标签: python-3.xpki

解决方案


您可以编写一个像这样的简单解析器来读取所有像这样的公钥

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,但我不确定它是否支持多个密钥。看这里的例子。


推荐阅读