我想使用命令:
创建一个像openssl这样的.tsq文件 openssl ts -query -data <file>
-no_nonce -sha512 -out <out.tsq>
我想用python实现这个,任何人都知道如何做这个,任何模块或类似的东西?
答案 0 :(得分:2)
现在我可以想到三种不同的方法:
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命令正在创建不包含任何变量部分的TS请求(例如nonce或策略OID),因此无论您将使用什么输入数据,请求结构的第一部分都不会更改。 答案 1 :(得分:1)
这是来自@jariq's answer的第三个想法的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())
答案 2 :(得分:0)
要扩展@j-f-sebastian's answer,如果要使用sha-256(或任何256位散列函数)进行散列,请使用以下常量:
b'06\x02\x01\x01010\r\x06\t`\x86H\x01e\x03\x04\x02\x01\x05\x00\x04 '
(是的,最后一个字符是空格)