有没有办法扭转这个python函数?
Posted
技术标签:
【中文标题】有没有办法扭转这个python函数?【英文标题】:Is there a way to reverse this python function? 【发布时间】:2021-06-05 00:18:57 【问题描述】:def function(value):
bit = value << 1
movebit = bit & 255
if (value> 127 ):
movebit = movebit | 1
return (movebit)
我有这段代码,我正试图反转,例如 我知道第一行其实就是把user_input相乘,保存成bit。
问题是我不知道如何更改接下来的几行来反转输出。
示例:
test = [226, 3, 214, 111, 20, 240]
# after function => [197, 6, 173, 222, 40, 225]
# goal is to reverse them back to test
toReverse = [197, 6, 173, 222, 40, 225]
我的目标是 for 循环遍历 toReverse 并在每个元素上,将其发送到函数 并取回与 testArray 在同一索引上的数字。
【问题讨论】:
用户将如何输入数字?有什么具体的格式吗? 这是一个更大的解密任务的一部分,所以数字不是用户真正输入的,感谢评论,将更新问题以使其清楚。 该函数使用&
和|
按位运算。这些操作无法撤消。
我确实知道这些按位运算是不可逆的,但我认为可能是因为某些变量是恒定的,所以例如在包含 (movebit | 1) 的行上,我理解它基本上是逻辑与 movebit % 2 == 0 相同,而不是在数字上加 1,否则保持不变。 (我知道按位运算符是如何“在幕后”行动的,但我认为这里有一个问题。)
正如一个答案中所解释的,它是对 8 个最低位的位旋转。所以如果你的输入超过八位,高位将被忽略,输出只会在 0-255 / 00000000
到 11111111
范围内。
【参考方案1】:
我为这个任务创建了整个解密器(加密器)——你输入的代码是它的一部分。 退房: https://github.com/sisidor69/CyWar_Decryptor
【讨论】:
正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。【参考方案2】:似乎功能是 rotl - 向左旋转操作。所以反向将是 rotr: 向右旋转:
def rotr(value):
zbit = (value & 1) << 7
return (value >> 1) | zbit
【讨论】:
哇!非常感谢。你介意解释一下这是如何工作的吗?向左旋转操作是什么意思? 我可以推荐en.wikipedia.org/wiki/Bitwise_operation#Rotate 我不确定我是否知道如何在评论中解释这些基本的编程内容。检查上面提供的***链接。想看懂我写的,就拿纸,手动把所有操作一一实现。这个函数很简单。以上是关于有没有办法扭转这个python函数?的主要内容,如果未能解决你的问题,请参考以下文章