我想用命令创建一个像 openssl 这样的 .tsq 文件:
openssl ts -query -data <file>
-no_nonce -sha512 -out<out.tsq>
我想用python实现这个,任何人都知道如何做到这一点,任何模块或类似的东西?
我想用命令创建一个像 openssl 这样的 .tsq 文件:
openssl ts -query -data <file>
-no_nonce -sha512 -out<out.tsq>
我想用python实现这个,任何人都知道如何做到这一点,任何模块或类似的东西?
现在我可以想到三种不同的方法:
TimeStampReq
中定义的请求结构。0x30 0x56 0x02 0x01 0x01 0x30 0x51 0x30 0x0D 0x06 0x09 0x60 0x86 0x48 0x01 0x65 0x03 0x04 0x02 0x03 0x05 0x00 0x04 0x40
到哈希值。这应该对您有用,因为您提供的 OpenSSL 命令正在创建不包含任何可变部分(例如 nonce 或策略 OID)的 TS 请求,因此无论您将使用什么输入数据,请求结构的第一部分都不会改变。这是@jariq 回答中第三个想法的 Python 3 实现:
#!/usr/bin/env python3
"""Emulate `openssl ts -query -data <file> -no_nonce -sha512 -out <out.tsq>`
Usage: %(prog)s <file> [<out.tsq>]
If <out.tsq> is not given; use <file> name and append '.tsq' suffix
"""
import hashlib
import sys
from functools import partial
def hash_file(filename, hashtype, chunksize=2**15, bufsize=-1):
h = hashtype()
with open(filename, 'rb', bufsize) as file:
for chunk in iter(partial(file.read, chunksize), b''):
h.update(chunk)
return h
try: # parse command-line arguments
filename, *out_filename = sys.argv[1:]
out_filename.append(filename + '.tsq')
except ValueError:
sys.exit(__doc__ % dict(prog=sys.argv[0]))
h = hash_file(filename, hashlib.sha512) # find hash of the input file
with open(out_filename[0], 'wb') as file: # write timestamp query
file.write(b'0V\x02\x01\x010Q0\r\x06\t`\x86H\x01'
b'e\x03\x04\x02\x03\x05\x00\x04@')
file.write(h.digest())
要扩展@jf-sebastian 的答案,如果要使用 sha-256(或任何 256 位哈希函数)进行哈希,请使用以下常量:
b'06\x02\x01\x01010\r\x06\t`\x86H\x01e\x03\x04\x02\x01\x05\x00\x04 '
(是的,最后一个字符是空格)