【问题标题】:File encryption using symmetric key使用对称密钥加密文件
【发布时间】:2014-10-08 05:20:27
【问题描述】:

我正在尝试使用对称密钥加密文件。由于我无法做到这一点,我正在使用文件 (.txt) 内容进行一些测试,并使用对称密钥加密相同的内容,一切正常:

filename1 = raw_input("Insert file name: ")
with open(filename1,'rb') as f:
    s = f.read()

data1 = s


# insert password to create key

password1 = raw_input('Enter password (symmetric key): ')

# generate 16bytes (AES-128) key from inserted password
h1 = SHA256.new()
h1.update(password1)
key1 = h1.digest()[0:16]

# generate initialization 16bytes vector
iv1 = Random.new().read(16)

# criptogram creation (cipher data)
cipher1 = AES.new(key1, AES.MODE_CFB, iv1)
criptogram1 = iv1 + cipher1.encrypt(data1) 

但是,我需要的是使用对称密钥加密来加密文件,而不仅仅是我现在正在做的内容。我需要能够选择文件,然后使用其中的对称密钥。

编辑:对于“密码文件,而不仅仅是内容”?我的意思是我可以加密 .txt 文件中的某些内容,其中写入的内容,但我希望能够“直接”加密该文件,我不想打开它并读取里面的内容然后加密它。 .. 我发布的示例中,我输入了一个文件名(例如 xpto.txt),其中包含一些内容(例如 Hello world!),所以在示例中我只是加密该内容。

我想加密一个文件,而不必读取其中的内容。因为如果我尝试加密图片,我不会像在 .txt 文件中那样读取其中的内容,我想获取整个文件并对其进行加密。

【问题讨论】:

  • “密码文件,而不仅仅是内容”是什么意思?当然,加密文件意味着加密其内容.. :confused:
  • 不清楚你想要什么,你拥有什么,以及你期望如何通过你所做的事情到达那里。请给出示例输入和输出需要并解释你一直在尝试做什么来实现这一点。
  • 你的问题没有多大意义。您不会像文本文件那样读取图片文件,而是以二进制模式打开它并读取/加密其中的数据块。您可以以完全相同的方式处理文本文件。查看open(...) 函数的文档,您需要传入“rb”模式以将其设置为二进制模式。
  • @Brett Lempereur,我知道我无法像文本文件那样阅读图片,这就是我想要说明的重点。这就是为什么我需要加密“整个”文件而不仅仅是内容。二进制模式(或类似的东西)可能是我需要的。我希望能够加密任何类型的文件,所以我需要有一些共同点。我将查看 open(...) 函数文档。非常感谢您的回复。
  • @Psycho_Mind 您认为分块阅读文件内容会错过哪些部分?你做过实验吗?尝试实现您自己的“cp”版本。之后检查文件的 MD5 哈希值,它是否改变了?如果有,那么你做错了。

标签: python encryption sha256 encryption-symmetric


【解决方案1】:

如果我做对了 - 您可以加密当前文件中的某些内容,但是您不知道如何运行“myfile1.py”中的脚本来加密“myfile2.txt”中的行?

只需使用以下命令从第二个文件中读取第一个文件中的行:

with open('myfile2.txt') as myfile:
    mytext = myfile.readlines()

然后对mytext进行加密。

【讨论】:

    【解决方案2】:

    经过一番研究,我设法找到了解决方案:

    #read binary file to get bytes 
        while True:
            buf = fo.read(1024) #read 1024bytes from the file on each iteration of the loop 
            if len(buf) == 0:
                 break
    
        fo.close()
    
    
        # insert password to create key
    
        password1 = raw_input('Enter password (symmetric key): ')
    
        # generate 16bytes (AES-128) key from inserted password
        h1 = SHA256.new()
        h1.update(password1)
        key1 = h1.digest()[0:16]
    
        # generate initialization 16bytes vector
        iv1 = Random.new().read(16)
    
        # criptogram creation (cipher data)
        cipher1 = AES.new(key1, AES.MODE_CFB, iv1)
        criptogram1 = iv1 + cipher1.encrypt(buf)
    

    【讨论】:

      猜你喜欢
      • 2010-10-30
      • 1970-01-01
      • 2020-03-15
      • 2017-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多