【发布时间】:2013-12-06 10:30:12
【问题描述】:
我正在从生成的文本文件“generated.txt”中读取 64kb 并将数据写入 txt 文件 在每个写入的txt文件的开头都有奇怪的数据,除了第一个写入的文件。
如果我使用:
with open('generated.txt', 'rb') as f:
代替:
f = open('generated.txt', 'rb')
我在第一个文件中得到了同样奇怪的数据。
以十六进制表示的原始文件的第二个 64k 块的开头:
0a31303935300d0a31303935310d0a31
“奇怪”的数据来自第二个十六进制的txt文件:
e7fadb0930588fb74d1aba3fd3bafc84
第二个文件加密的十六进制开头:
bde07ad1e305193105655a42998a1fc9
可惜不一样
完整代码如下:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from Crypto.Cipher import AES
from Crypto.Protocol.KDF import PBKDF2
from Crypto import Random
key_size = 32
iterations = 10000
key = 'password'
salt = Random.new().read(key_size)
iv = Random.new().read(AES.block_size)
derived_key = PBKDF2(key, salt, key_size, iterations)
cipher = AES.new(derived_key, AES.MODE_CFB, iv)
i = 1
f = open('generated.txt', 'rb')
while True:
data = f.read(65536)
if not data:
break
encodedtext = iv + cipher.encrypt(data)
decodedtext = str(cipher.decrypt(encodedtext))[16:]
print 'Writing ' + str(i)
g = open('LOG_' + str(i) + '.txt', 'wb')
g.write(decodedtext)
g.close()
d = open('LOG_' + str(i) + '_ENC.txt', 'wb')
d.write(encodedtext)
d.close()
i = i+1
f.close()
感谢您的帮助:)
【问题讨论】:
-
txt文件的链接已损坏。如果内容不大,可以放到post body或者使用pastebin.org之类的东西,避免依赖任何基于账户的存储服务。 -
你用的是linux吗?如果没有,我会厌倦以“二进制”模式打开 ascii 文件。
-
如果使用“w”和“r”而不是“wb”和“rb”,则没有变化。我想稍后加密其他文件,例如图像或视频文件;)
-
能否显示加密文本的开头,包括“奇怪的数据”?请注意,加密结果不是文本。
-
好的,你能用十六进制给出输入和输出的前32个字节吗?将二进制打印为字符串并没有多大帮助。
标签: python encryption io aes pycrypto