有没有办法扭转这个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 在同一索引上的数字。

【问题讨论】:

用户将如何输入数字?有什么具体的格式吗? 这是一个更大的解密任务的一部分,所以数字不是用户真正输入的,感谢评论,将更新问题以使其清楚。 该函数使用&amp;|按位运算。这些操作无法撤消。 我确实知道这些按位运算是不可逆的,但我认为可能是因为某些变量是恒定的,所以例如在包含 (movebit | 1) 的行上,我理解它基本上是逻辑与 movebit % 2 == 0 相同,而不是在数字上加 1,否则保持不变。 (我知道按位运算符是如何“在幕后”行动的,但我认为这里有一个问题。) 正如一个答案中所解释的,它是对 8 个最低位的位旋转。所以如果你的输入超过八位,高位将被忽略,输出只会在 0-255 / 0000000011111111 范围内。 【参考方案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函数?的主要内容,如果未能解决你的问题,请参考以下文章

Python Numpy累积/差异[重复]

有没有办法让这个 Python kNN 函数更高效?

零基础入门Python3-函数详解

Python学习笔记7_函 数

python学习之路(基础篇)——函数

Python——函数进阶