z3的使用
z3的使用
在crypto中,经常会遇到某些带有限制的方程,有一些可以用线性代数的语言翻译,但有些则不行,比如与运算或运算,没办法简单用线性代数求解,那么这时候就需要z3
一、求解带不等式的方程
声明变量
1 | x = Int('x') |
solve可以解决方程
1 | from z3 import * |
可以解决这样的方程问题
二、求解非多项式约束,例如位运算
假设我们有一个方程:
1 | (x & 0xFF) ^ (x >> 8) == 0x37 |
其中 x
是一个 16 位的变量(即
0 ≤ x < 65536
),我们希望找到满足条件的
x
。
1 | from z3 import * |
用这个可以解决西电的问题
1 | def calculate_level1(m, x, y): |
我们有机会对m赋值两次,求x,y
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 infinite_blog!