Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Z3python XOR和?_Python_Python 3.x_Z3_Z3py - Fatal编程技术网

Z3python XOR和?

Z3python XOR和?,python,python-3.x,z3,z3py,Python,Python 3.x,Z3,Z3py,我现在正试图用z3python解一些方程,我遇到了一个我无法处理的情况 我需要将某些位向量与特定的非ascii字符值进行异或运算,并将它们相加以检查校验和。 以下是一个例子: pbInput=[BitVec(“{}”。格式(i),8)表示范围内的i(KEY_LEN)] password=“\xff\xff\xde\x8e\xae” 添加(Xor(pbInput[0],密码[0])+Xor(pbInput[3],密码[3])==300) 它会导致z3类型异常: z3.z3types.z3异常:无

我现在正试图用z3python解一些方程,我遇到了一个我无法处理的情况

我需要将某些
位向量
与特定的非ascii字符值进行异或运算,并将它们相加以检查校验和。 以下是一个例子:

pbInput=[BitVec(“{}”。格式(i),8)表示范围内的i(KEY_LEN)]
password=“\xff\xff\xde\x8e\xae”
添加(Xor(pbInput[0],密码[0])+Xor(pbInput[3],密码[3])==300)
它会导致z3类型异常:
z3.z3types.z3异常:无法将值转换为z3布尔值

我找到并试图对我的
密码
字符串应用一个函数,并将这一行添加到我的脚本中:
password=函数(密码、StringSort()、IntSort()、BitVecSort(8))
但它当然会失败,因为字符串不是ASCII字符串。 我不在乎它是一个字符串,我试着只做
Xor(pbInput[x]^0xff)
,但这也不起作用。我找不到关于这一特殊情况的任何文件

编辑: 这是完整的回溯

Traceback (most recent call last):
  File "solve.py", line 18, in <module>
    (Xor(pbInput[0], password[0]) 
  File "/usr/local/lib/python2.7/dist-packages/z3/z3.py", line 1555, in Xor
    a = s.cast(a)
  File "/usr/local/lib/python2.7/dist-packages/z3/z3.py", line 1310, in cast
    _z3_assert(self.eq(val.sort()), "Value cannot be converted into a Z3 Boolean value")
  File "/usr/local/lib/python2.7/dist-packages/z3/z3.py", line 91, in _z3_assert
    raise Z3Exception(msg)
z3.z3types.Z3Exception: Value cannot be converted into a Z3 Boolean value
回溯(最近一次呼叫最后一次):
文件“solve.py”,第18行,在
(异或(pbInput[0],密码[0])
文件“/usr/local/lib/python2.7/dist-packages/z3/z3.py”,第1555行,Xor格式
a=s.cast(a)
文件“/usr/local/lib/python2.7/dist-packages/z3/z3.py”,第1310行,强制转换
_z3_断言(self.eq(val.sort()),“值不能转换为z3布尔值”)
文件“/usr/local/lib/python2.7/dist packages/z3/z3.py”,第91行,在
引发Z3异常(msg)
z3.z3types.z3异常:无法将值转换为z3布尔值

如果您知道如何执行此操作,请提前感谢!

您的代码中有两个问题

  • Xor
    仅用于
    Bool
    值;对于位向量,只需使用
    ^
  • 在传递到异或之前,使用函数
    ord
    将字符转换为整数
您没有给出完整的程序(这总是很有帮助的!),但以下是您如何在z3py中将该部分作为完整程序编写的:

从z3导入*
解算器=解算器()
键长度=10
pbInput=[BitVec(“c”{}.format(i),8)表示范围内的i(KEY_LEN)]
password=“\xff\xff\xde\x8e\xae”
求解器.add((pbInput[0]^ord(密码[0]))+(pbInput[3]^ord(密码[3])==300)
打印解算器。检查()
打印解算器.model()
这张照片是:

sat
[c_3 = 0, c_0 = 97]
(我给了变量更好的名称,以便更好地区分。)因此,它告诉我们解决方案是:

>>> (0xff ^ 97) + (0x8e ^ 0)
300

这确实是您要求的。

您需要提供完整的回溯。。。