【问题标题】:Decoding windows certificate serial number in python在python中解码windows证书序列号
【发布时间】:2020-04-15 14:54:24
【问题描述】:

我正在尝试解码 X.509 证书的序列号,我在 Python 中使用 win32crypt 打开 (http://timgolden.me.uk/pywin32-docs/PyCERT_CONTEXT.html)

import win32crypt
import sys

# lpszStoreProvider
CERT_STORE_PROV_SYSTEM = 0x0000000A

# dwFlags
CERT_SYSTEM_STORE_LOCAL_MACHINE = 0x00020000    

def main(*argv):
    store = win32crypt.CertOpenStore(CERT_STORE_PROV_SYSTEM, 0, None, CERT_SYSTEM_STORE_LOCAL_MACHINE, "MY")
    for cert in store.CertEnumCertificatesInStore():
        print("1 Cert: " + str(cert))
        print("2 CertEnumCertificateContextProperties: " + str(cert.CertEnumCertificateContextProperties()))
        print("3 cert.Subject: " + win32crypt.CertNameToStr(cert.Subject))
        print("4 SerialNumber: " + str(cert.SerialNumber))



if __name__ == "__main__":
    print("Python {0:s} {1:d}bit on {2:s}\n".format(" ".join(item.strip() for item in sys.version.split("\n")), 64 if sys.maxsize > 0x100000000 else 32, sys.platform))
    main(*sys.argv[1:])
    print("\nDone.")

内存中的表示如下:

序列号 = b'\x07\x00\x00\x00\x00\x00\xc3o\x0c\xfbK\xf8\xdf\xbe\x07\x00\x00\x00*'

就是想不通,用的是什么编码,怎么解码?!

编辑:(..正确序列号中的字节:2a00000007bedff84bfb0c6fc3000000000007)

【问题讨论】:

  • b 前缀是bytes 的标识符。
  • ...到目前为止不足为奇。我想知道字节的含义。证书的实际序列号是:2a00000007bedff84bfb0c6fc3000000000007 那么如何将字节解码成对应的序列号呢?
  • ... 数字以 little endian 字节顺序存储,因此您只需要将字节转换为 int。

标签: python windows certificate pywin32 wincrypt


【解决方案1】:

答案:decoded = int.from_bytes(cert.SerialNumber,"little")

【讨论】:

    猜你喜欢
    • 2014-04-10
    • 2011-01-07
    • 1970-01-01
    • 2012-10-23
    • 2013-05-29
    • 1970-01-01
    • 2014-06-04
    • 2018-04-11
    • 2015-04-15
    相关资源
    最近更新 更多