如何反转含移位、异或及密钥的加密算法以还原任意长度原始消息?
问题描述
我需要编写一个程序,用于反转msg ^ ((msg << shift) & key)算法,还原出原始消息,且程序需支持任意长度的消息。设定的前提条件如下:
- 二进制密钥长度大于移位值
shift - 消息长度不小于密钥长度(代码中会包含密钥长度小于
shift的判断,但该场景无需重点关注,仅为保证程序完整性添加)
已实现的部分
我已经实现了密钥为0xffffffff且采用右移操作时的解码功能,代码如下:
def decode(value,shift): binary = format(value,'b') valueLen = len(binary) - shift y = value if valueLen < 0: return value else: for i in range(valueLen): y = value ^ y << shift y = y >> (shift*valueLen) return y
这段代码利用(a ^ b) ^ (b ^ c) = a ^ c的特性,通过多次移位后异或来还原消息,最后去除冗余位。
遇到的问题
但加入密钥key后,我完全无从下手,希望能得到编程实现的思路指引。
参考加密算法
附上完整的加密算法供参考:
msg = msg ^ (msg >> 6) msg = msg ^ ((msg << 13) & 275128763) msg = msg ^ ((msg << 20) & 2186268085) msg = msg ^ (msg >> 14)
内容的提问来源于stack exchange,提问作者Popular Power
相关产品推荐
相关产品推荐

