如何使用冒号表示法打印指纹(sha256 字节)?

How do I print a fingerprint (sha256 bytes) using colon notation?

我有一个 x509 证书指纹,它基本上只是一个 SHA 256 字节字符串。

这些通常以 43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8.

的形式表示

是否有更合适的方法从像 b'CQC\xa1\xb5\xfc\x8b\xb7\n:\xa9\xb1\x0ffs\xa8' 这样的字节字符串生成这些?

binascii.hexlify(b'CQC\xa1\xb5\xfc\x8b\xb7\n:\xa9\xb1\x0ffs\xa8') 让我走到了一半 (b'435143a1b5fc8bb70a3aa9b10f6673a8'),但我没有任何冒号。

no_colon = b'CQC\xa1\xb5\xfc\x8b\xb7\n:\xa9\xb1\x0ffs\xa8'.hex()
colon = ':'.join(no_colon[i:i+2] for i in range(0, len(no_colon), 2))

基本上,我使用 .hex() 从本质上“删除”了字符串中的 b'' 并将其转换为十六进制。

然后,':'.join(no_colon[i:i+2] for i in range(0, len(no_colon), 2))每2个字母后加一个冒号。我想这就是你想要的。但是,这仅在每个冒号之间始终有 2 个字符的情况下才有效。

这所有输出:

43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8
hashbytes = b'CQC\xa1\xb5\xfc\x8b\xb7\n:\xa9\xb1\x0ffs\xa8'
print(":".join([format(i,'02x') for i in hashbytes]))

43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8

可能有更短的方法,也许是在 hexdigest() 字符串输出上使用 format() 方法。