Python中的加密/解密;解密不适用于几个随机字节

时间:2015-01-11 15:21:55

标签: python encryption shift

首先,我是Python的新手。我会尽力解释这个! 我正在制作一个加密/解密程序来加密和解密文件,一切正常,没有给出错误。只有当我在十六进制编辑器中检查新解密的文件到原始文件时,很少但有些字节没有被正确地删除。我能看到这种情况的唯一地方是任何'FF'字节现在是解密文件中的'00'字节。我无法弄清楚为什么会发生这种情况,代码如下:

def shift_byte(x):
    if(ord(x) == 0):
        return (ord(x))
    elif(ord(x) == shiftrange):
        v1 = (ord(x) + shift)
        return v1
    else:       
        return ((ord(x) + shift) % 255)

这就是加密,只是一个简单的移位密码,这是来自另一个文件的解密:

def shift_byte(x):
    if(x == 0):
        return (x)
    elif(x == shiftrange):
        v1 = x - shift
        return v1
    else:       
        return ((x - shift) % 255)

我唯一的想法是,它与这一行有关:

return ((x - shift) % 255)

这里有什么不对吗?感谢。

2 个答案:

答案 0 :(得分:1)

必须是:

return ((x + shift) % 256)

return ((x - shift) % 256)

对于%255,您的值的范围仅为0到254(0x00到0xFE),而不是0到255(0x00到0xFF)。

答案 1 :(得分:0)

我真的不明白你使用这种结构的原因:

if(x == 0):
    return (x)
elif(x == shiftrange):
    v1 = x - shift
    return v1
else:       
    return ((x - shift) % 256)

为什么不返回((x-shift)%256)?如果我理解正确,你不加密或解密00对吗?因为如果x == 0,你只需返回x。在这种情况下,它不会被加密"。

对我来说这是一个问题,因为你用F加权F,它将为0.当调用解密函数0时,它不会被移回F,它只会返回0。

只需使用:

def shift_byte(x):       
    return ((x - shift) % 256)

这有帮助吗?