5

我正在使用androguard从 Android .APK 文件中提取功能,现在我需要从其签名文件(通常是 CERT.RSA)中提取序列号(*)。我找到了 asn1crypto,但我不太明白如何将它与 pkcs7 一起使用。那么有没有适合这个目的的python包呢?

(*): 序列号

4

1 回答 1

7

评论:我将 pkcs7 作为内存对象,而不是文件

PyOpenSSL不从文件中读取!

OpenSSL.crypto.load_pkcs7_data(类型,缓冲区)

从使用 type 类型编码的字符串缓冲区加载 pkcs7 数据。
类型类型必须是 FILETYPE_PEM 或 FILETYPE_ASN1)。

fromSO Answer 45111623import get_certificates

from OpenSSL import crypto
pkcs7 = crypto.load_pkcs7_data(crypto.FILETYPE_ASN1, 
                               open('certs/signature.der', 'rb').read())
certs = get_certificates(pkcs7)
for cert in certs:
    print('Subject:{}, Serial Nnumber:{}'.
        format(cert.get_subject(), cert.get_serial_number()))

>>>Subject:<X509Name object '/CN=key1'>, Serial Nnumber:13315126025841024674
>>>Subject:<X509Name object '/CN=key2'>, Serial Nnumber:14142490995367396705

问题:解析pkcs7的python包?

您可以使用 openssl 将 PKCS#7 转换为 PEM,使用PyOpenSSL可以读取 PEM

openssl pkcs7 -print_certs -in sample.p7b -out sample.cer

阅读相关的 SO 答案:pyOpenSSL 的 PKCS7

于 2017-08-20T19:30:36.087 回答