微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将文件中的 openssl 生成的 rsa 公钥与另一个文件中的多个公钥进行比较的最佳方法是什么?

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

计划

  1. A.crt 文件加载到 vara 中。
  2. B.crt 文件加载到 varB 中。
  3. 尝试使用正则表达式拆分字符串 [我不成功] (-----BEGIN PUBLIC KEY-----.*-----END PUBLIC KEY-----)
  4. 比较 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

,

请注意 opensslpropper 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 举报,一经查实,本站将立刻删除。