Python 2.7 这听起来像加密吗?

Python 2.7 这听起来像加密吗?,python-2.7,cryptography,Python 2.7,Cryptography,我正在用python 2.7制作一个加密/解密设备。最终目标是允许使用此加密在2个节点之间进行加密通信。我真的只是想知道它看起来是否不容易被解密。我用system.random来做这个,所以生成的数字的随机性应该很好。但实际的算法不是太简单吗 它会生成许多介于0和255之间的随机整数,这就是密钥流。然后将每个字符表示为0到255之间的整数。消息中的第一个字符添加到第一个整数,第二个字符添加到第二个整数,以此类推。这将使加密消息与密钥流整数一样随机。我只是想解释一下它是如何工作的,而不是仅仅发布脚

我正在用python 2.7制作一个加密/解密设备。最终目标是允许使用此加密在2个节点之间进行加密通信。我真的只是想知道它看起来是否不容易被解密。我用system.random来做这个,所以生成的数字的随机性应该很好。但实际的算法不是太简单吗

它会生成许多介于0和255之间的随机整数,这就是密钥流。然后将每个字符表示为0到255之间的整数。消息中的第一个字符添加到第一个整数,第二个字符添加到第二个整数,以此类推。这将使加密消息与密钥流整数一样随机。我只是想解释一下它是如何工作的,而不是仅仅发布脚本

def createkey():
    file = raw_input('file name to save key under:')
    maxcount = input("digits? Default is 2500.")
    if maxcount == '':
        maxcount = 2500

    digit = 0
    while digit < maxcount:
        rng=random.SystemRandom()
        key=rng.randint(100,356)
        print key
        with open(file, "a+") as myfile:
            myfile.write(str(key))
        digit = digit + 1
    myfile.close()


def encrypt():
    file_to_encrypt = raw_input('file name or path to encrypt:')

    destruct = raw_input('self destruct?')

    with open(file_to_encrypt, 'a+') as file:
        if destruct == 'y':
            file.write('\nThis message will self destruct.')

    with open(file_to_encrypt) as file:
        length = file.read()
        length = len(length)
        print length

    file_to_write = raw_input('Desired filename for encrypted info:')

    keyfile=raw_input('Key file:')

    num_chars = len(keyfile)

    count = 1
    paswd = raw_input('Enter password with which to encrypt file.')
    passum = 0
    charcount = 0
    counter = 0

    for letter in paswd:
        paschar = ord(letter)
        passum = passum + paschar
        charcount = charcount + 1
    if passum != 0:
        passum = int(math.sqrt((2 * passum) / charcount))
    else:
        pass

    with open(file_to_encrypt, 'r') as file:
        with open(keyfile) as key:
            while counter != length:
                txt = file.read(1)
                charnum = ord(txt)

                lines = key.read(3)
                x = lines
                x = int(x)
                x = x - 100
                keynum = (x)

                keynum = keynum + passum
                enmes = int(charnum) + (keynum)

                if enmes >= 256:
                    enmes = enmes - 256

                enmes = chr(enmes)
                print enmes

                enfile = open(file_to_write, 'a+')
                enfile.write(enmes)
                count = count + 1
                if count == num_chars:
                    count = 1
                counter = counter + 1

你设计了一个流密码。已经有经过测试的安全流密码可用,有关一些示例,请参阅

流密码的安全性取决于密钥流生成的安全性。除非您是加密专家,否则您的密钥流生成器几乎肯定是不安全的。您似乎正在使用标准系统RNG。此类RNG不安全。至少使用系统提供的安全RNG


您可能想看看RC4,它现在已经过时了,但它是流密码的一个很好的简单示例。它会阻止你的小弟弟阅读你的文件,除非他为国家安全局工作。

一般来说,如果你不得不问自己编的加密算法是否容易被破解,那么答案是:是的,几乎可以肯定是。查一下施奈尔定律。这里是:任何人,从最无知的业余爱好者到最好的密码学家,都可以创建一个他自己无法打破的算法。这适用于您可能提出的整个安全方案,除非您的名字是或或Bruce等。感谢您的精彩见解。那么,为什么你认为我在问这个问题?我认为,在不知道密钥流的情况下,打破一个随机字符串是相当困难的,但我想这是一门科学。我想你可以解密这个吗?ù±;§TfÆ|]µ»请不要关闭此问题;我想在周末做一次密码分析并写一个答案。流密码不是一个完美定义的术语,但我不会称之为流密码,因为密钥必须至少是明文的三倍长。密钥流通常由短密钥确定地生成。我认为datenwolf说这是一个过于复杂的OTP是正确的。流密码是一个OTP lite,具有确定生成的密钥流。真正的OTP有一个纯粹随机的密钥流。在这两种情况下,密钥流都和明文一样长。谢谢。我的印象是,SystemRandom for a RNG非常适合这种用途,但是?SystemRandom如果实现,可能是安全的,这取决于底层操作系统secure RNG的安全性。请注意,SecureRandom的文档说明该序列是不可复制的,因此如果要解密,则需要保留整个密钥流。这就是为什么具有短密钥的流密码比具有与消息长度相同密钥的OTP更容易使用的原因。