实际上,我选择了一个可执行文件。 大小20Mb 。
我使用file.read(size=16)
阅读了内容。
如果返回的字节字符串的长度小于16,则用\0 (NULL)
填充其余部分。
f = open("./installer.exe","rb")
obj = AES.new(b"0123456789012345",AES.MODE_CBC, b"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0")
bs = b""
t = f.read(16)
while t != b"":
if len(t) < 16:
t = t + b"\0" * (16 - len(t)) # if < 16 bytes using padding
bs = bs + obj.encrypt(t)
else:
bs = bs + obj.encrypt(t)
t = f.read(16)
然后, bs 会内容使用 0123456789012345 加密的所有内容的字节字符串
我首先意识到读取文件的机制,然后我加密内容,如上面的代码片段所示(使用obj.encrypt()
)。然后我写了一个加密内容的新文件。我读了加密文件的数据,并通过类似的程序使用 obj.decrypt 以16个字节的间隔解密数据,然后我用解密的数据写一个新文件
大约需要3分钟。
¿它快速,缓慢还是预期?
根据我所看到的,该模块是用C编写的。也许我应该使用Cython嵌入式来加快速度?
PGP如何实时解密更多数据(例如,在加密的虚拟磁盘中)?
修改
这几乎相同:
obj = AES.new(b"0123456789012345",AES.MODE_CBC, b"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0")
bs = b""
t = f.read(16)
while t != b"":
if len(t) < 16:
t = t + b"\0" * (16 - len(t))
bs = bs + t
else:
bs = bs + t
t = f.read(16)
bse = obj.encrypt(bs)
答案 0 :(得分:0)
确定。问题是加密缓冲区的大小。我决定使用64000字节的字符串。
程序很简单。 总大小/字符串细分 - &gt;加密。在最后一段中,如果段的大小低于64000而不是16的倍数,则找到最接近的倍数并填充剩余空间
bs = b""
dt = f.read()
dtl = len(dt)
dtr = ( dtl / 64000 ) + 1
for x in range(0, dtr):
if x == dtr-1:
i1 = 64000 * x
dst = dtl - i1
i = math.ceil(dst / 16.0) * 16
dst = i - dst
buf = dt[i1:] + (b"\0" * int(dst))
bs = bs + obj.encrypt(buf)
else:
i1, i2 = 64000 * x , 64000 * (x+1)
bs = bs + obj.encrypt(dt[i1:i2])
现在需要10秒钟。 谢谢大家。