如何在不使用任何外部库的情况下模糊文件?

时间:2017-06-08 00:32:51

标签: python python-2.7 encryption password-protection

我目前正试图在不使用任何库的情况下模糊文件内容或只是文本文件。我知道这根本不是很安全,但我基本上想要的是一个程序,它会询问你的密码是什么?加密"它是,然后它询问文件名是什么,然后它找到该文件和"加密"它。然后另一个程序用于解密"它所以它要求输入密码和文件名,然后"解密"它。我不关心实际的安全性,所以如果它可以很容易地打开它很好我只需要它,所以如果你单击该文件它就不会打开。

最重要的是,我不希望它使用任何库,所以没有pycrypto或类似的东西。

我在64位窗口。

我也是代码世界的完全初学者,只知道如何获取用户输入,打印东西,if循环和while循环等基本内容。

提前致谢!

3 个答案:

答案 0 :(得分:1)

我不知道这是否属于"外部图书馆"在你的脑海中,但如果你在Linux机器上,你可能有gpg命令。这是一个合理的*安全加密协议,您可以从python访问 - 或直接从命令行访问,如果您只是希望文件受到保护而您不关心通过python完成它。

或者,您可以将一个简单的机制组合在一起,根据已知的密码来模糊文件的内容。例如,你可以"伸展"密码到文件文本的长度(将字符串乘以(1 +(文本长度/密码长度))然后将两者压缩在一起。这会给你一堆元组,可以转换为它们的序数值({ {1}} => 102,例如)和xored together(ord('f') => 4)并转换回字符(chr(4)=> unprintable' \ x04'产生的字符是你的密文。 当然,所有这些都是微不足道的,但它很容易实现,解密也很简单。

*故意轻描淡写:)

答案 1 :(得分:0)

您可以尝试使用3640 3640 3640 user system total real original_method 3.494000 0.016000 3.510000 ( 3.510709) backspace 1.872000 0.000000 1.872000 ( 1.862550) better_method 1.155000 0.031000 1.186000 ( 1.187495) 作为加密密钥。可能是文件在二进制级别上的逻辑操作,例如passwordor,或者其他人可以非常简单地加密它 - 但它不像你提到的那样安全。 / p>

答案 2 :(得分:0)

您可以通过将XTEA(xTended Tiny Encryption Algorithm)代码复制到项目中来使用python code(xTended Tiny Encryption Algorithm),它只有28行python。它已被cryptanalysis所取代,并且显示出相当安全。

import struct

def crypt(key,data,iv='\00\00\00\00\00\00\00\00',n=32):
    def keygen(key,iv,n):
        while True:
            iv = xtea_encrypt(key,iv,n)
            for k in iv:
                yield ord(k)
    xor = [ chr(x^y) for (x,y) in zip(map(ord,data),keygen(key,iv,n)) ]
    return "".join(xor)

def xtea_encrypt(key,block,n=32,endian="!"):
    v0,v1 = struct.unpack(endian+"2L",block)
    k = struct.unpack(endian+"4L",key)
    sum,delta,mask = 0L,0x9e3779b9L,0xffffffffL
    for round in range(n):
        v0 = (v0 + (((v1<<4 ^ v1>>5) + v1) ^ (sum + k[sum & 3]))) & mask
        sum = (sum + delta) & mask
        v1 = (v1 + (((v0<<4 ^ v0>>5) + v0) ^ (sum + k[sum>>11 & 3]))) & mask
    return struct.pack(endian+"2L",v0,v1)

def xtea_decrypt(key,block,n=32,endian="!"):
    v0,v1 = struct.unpack(endian+"2L",block)
    k = struct.unpack(endian+"4L",key)
    delta,mask = 0x9e3779b9L,0xffffffffL
    sum = (delta * n) & mask
    for round in range(n):
        v1 = (v1 - (((v0<<4 ^ v0>>5) + v0) ^ (sum + k[sum>>11 & 3]))) & mask
        sum = (sum - delta) & mask
        v0 = (v0 - (((v1<<4 ^ v1>>5) + v1) ^ (sum + k[sum & 3]))) & mask
    return struct.pack(endian+"2L",v0,v1)
  

归因,代码来自:ActiveState Code»Recipes