【问题标题】:Decryption logic using bit rotate使用位循环的解密逻辑
【发布时间】:2021-12-06 00:44:09
【问题描述】:

我正在尝试为以下加密逻辑编写解密逻辑。

import os
import string

keybytes = bytes(os.urandom(8))
bit = keybytes[0] % 7 + 1
kxor = []
key = ""

for i in range(1, 8):
    kxor.append(ord(string.ascii_letters[keybytes[i] % len(string.ascii_letters)]))
    key = key + chr(kxor[i-1])
print("Key is %s rotated by %d bits." % (key, bit))

def rotatel(x, bit):
    return ((x << bit) & 0xff) | (x >> (8 - bit))

plaintext = "ABCDE"
bit = 6
kxor = [65,115,113,107,98,75,85]
encryptedText = []
for i in range(0, len(plaintext)):
    encryptedText.append(rotatel(plaintext[i], bit) ^ kxor[i % len(kxor)])
print (bytes.encryptedText)

现在,bitkxor 值,我已经对它们进行了硬编码,因为我可以将它们取回;这意味着如果这些是我用于加密的值,因此我可以在编写解密逻辑时以编程方式获取kxor。 我苦苦挣扎的是rotatel 函数。 我试图扭转这种逻辑,但我无法弄清楚如何。所以需要一些指针来反转rotatel 函数。 这是正确的方式还是我完全以错误的方式处理这个问题?

基本上我的问题是我如何反转return ((x &lt;&lt; bit) &amp; 0xff) | (x &gt;&gt; (8 - bit))

【问题讨论】:

    标签: python encryption cryptography


    【解决方案1】:

    例如:

    bit = 6
    x = "123456"
    rotatel(x, bit) = "561234"
    

    所以你需要的是:

    y = "561234"
    reverse_rotatel(y, bit) = "123456"
    

    但是你必须记住你xor y (561234) 和kxor 在你rotatel 之后。所以你必须再次xorkxor 才能在reverse_rotatel

    之前得到y

    【讨论】:

    • 感谢您的回答,但我正在寻找返回的反向逻辑 ((x > (8 位))。我实际上将我的问题修改为更具体。
    【解决方案2】:

    我终于弄明白了。我想为rotatel写一个逆向逻辑-

    def rotatel(x, bit):
        return ((x << bit) & 0xff) | (x >> (8 - bit))
    

    我就是这样做的-

    def rotater(x, bit):
        return ((x >> bit)& 0xff) | (x << (8 - bit)) & 0xff
    

    【讨论】:

      猜你喜欢
      • 2014-10-03
      • 2012-04-18
      • 2014-01-05
      • 1970-01-01
      • 1970-01-01
      • 2016-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多