Sim, é possível definir a hora "expira" com base na hora da "criação". Usando um programa, o processo pode ser automatizado. Altere as constantes globais ( KPSCRIPT , DATABASE e PASSWORD ) para valores correspondentes ao seu sistema antes da execução. Neste exemplo específico, o tempo de expiração é definido para cinco anos após a data da última modificação. O programa abaixo foi adaptado da resposta de Paulo .
#! /usr/bin/env python3
import datetime
import subprocess
import uuid
KPSCRIPT = r'C:\Program Files (x86)\KeePass Password Safe 2\KPScript.exe'
DATABASE = r'C:\Users\Stephen Paul Chappel\Documents\Database.kdbx'
PASSWORD = r'password'
def main():
"""Get KeePass entries, check each one, and change if required."""
for line in ps(KPSCRIPT, '-c:ListEntries', DATABASE, '-pw:' + PASSWORD):
key, value, *pair = line.split(': ', 1) + [None]
if pair:
if key == 'UUID':
reference = uuid.UUID(value)
elif key == 'TLM':
tlm = datetime.datetime.strptime(value, '%Y-%m-%dT%H:%M:%S')
elif key == 'EXP':
if not {'False': False, 'True': True}[value]:
# Add 5 years to the last modification
# time for the expiry date and format.
te = tlm.replace(tlm.year + 5)
te = te.strftime('%Y-%m-%dT%H:%M:%S')
ps(
KPSCRIPT,
'-c:EditEntry',
DATABASE,
'-pw:' + PASSWORD,
'-refx-UUID:' + reference.hex,
'-setx-Expires:True',
'-setx-ExpiryTime:' + te
)
del reference, tlm
def ps(*args):
"""Provide an interface for writing commands like those in PowerShell."""
return subprocess.run(
args,
timeout=1,
check=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
universal_newlines=True
).stdout.splitlines()
if __name__ == '__main__':
main()