Я хочу сгенерировать кейген в python с z3.вот функция проверки:
def f(a):
a = ord(a)
if a <= 47 or a > 57:
if a <= 64 or a > 98:
exit()
else:
return a - 55
else:
return a - 48
def validate(key):
if len(key) != 16:
return False
for k in key:
if f(k)%2== 0:
return False
return True
Я попытался написать решатель для этого
from z3 import *
solver = Solver()
def f_z3(a):
return If(
Or(a<=47, a>57),
If(
Or(a<=64, a>98),
False, # exit()???
a -55
),
a -48
)
key = IntVector("key", 16)
for k in key:
solver.add(f_z3(k)%2==0)
solver.check()
print(solver.model())
, а вот вывод
[key__1 = 48,
key__10 = 48,
key__9 = 48,
key__15 = 48,
key__6 = 48,
key__8 = 48,
key__4 = 48,
key__0 = 48,
key__14 = 48,
key__11 = 48,
key__7 = 48,
key__5 = 48,
key__2 = 48,
key__12 = 48,
key__13 = 48,
key__3 = 48]
, который возвращает ключ«0000000000000000», но validate («0000000000000000») возвращает False.
Я знаю, что проблема в функции f_z3
, я не знаю, как выразить exit()
внутри if, Iхочу что-то всегда Ложь.Но вместо этого я просто возвращаю False.
Есть идеи, как решить эту проблему?