padding不唯一,但是是有限的可能取值。
padding就是寻找m、n,使得table[4m] == table[4n](这样才有table[4m] ^ table[4n] == 0),然后用m、n分别作为低4位、高4位拼凑出a,用a跟密钥key[i]异或就得到padding字节了。
为了方便寻找满足table[4m] == table[4n]的m、n,给table新建一个查找表就行了,保证从这个新表里(随机)查找出来的m、n一定满足table[4m] == table[4n]。
新表是两个集合,第一个是{ x | table[4x] = 0},第二个是{y | table[4y] = 1}
每次从第一或者第二个集合中任取两个数作为m、n(m和n可以相同)。
嫌麻烦的话,直接令m = 1, n = 2就行了,去掉随机性(是否会增加已知明文攻击的可能请自行判定)
table[4m] = table[4] = 1
table[4n] = table[8] = 1
--
修改:z16166 FROM 123.115.134.*
FROM 123.115.134.*