我想加载下面的十六进制文件
1)在第一行初始化值(IV),
2) 第二行的加密键,
3) 第三行的纯文本数,以及
4) 密码块链(CBC)模式下AES加密的实际明文
进入numpy数组。在
6bce1cb8d64153f82570751b6653c943
b15a65475a91774a45106fbc28f0df70
10
f493befb2dcad5118d523a4a4bf4a504
54fc4e0a82ae8dc56cc7befc9994b79d
878d287647b457fd95d40691b6e0c8ab
dc0adc16665eb96a15d3257752ae67dc
8cda3b8f23d38e9240b9a89587f69970
e06301763146c1bac24619e61015f481
c19def2f12e5707d89539e18ad104937
048d734a1a36d4346edc7ceda07ff171
5e621ce0a570478c1c2ec3e557ca3e0d
e55c57b119ff922b7f87db0ead2006cd
如果文件的一致性困扰着你,你可以忽略第三行,它告诉你要加密的纯文本的数量。除第三行外,所有行都是128位十六进制条目
其思想是将这个文件加载到numpy数组中,然后高效地进行AES加密。在
如何将其加载到numpy数组中,然后从中使用AES密码密码对这个文件和类似文件进行AES加密。我有这种格式的文件有多达一亿的纯文本。在
谢谢,如果你有任何问题请告诉我
我假设您希望取消数据的加密,并将结果bytestrings存储为固定长度的字符串,而不是
object
。(不能将它们存储为某种int128类型,因为numpy没有这样的类型。)为了避免将3.2GB的文本读入内存,并使用大致相同的预处理量将其预处理为所需的格式,您可能需要使用
fromiter
,因此:如果您有10GB的RAM可供使用(粗略估计),那么将整个内容作为
array
的array
读取,然后转换两次……但我对此表示怀疑。在至于这是否有帮助…你可能会得到一点好处,因为AESING16字节可能足够快,迭代的成本是显而易见的。让我们来测试一下。在
在64位macpython2.7.2中,我通过反复复制示例创建了一个100000个s16的数组。然后:
^{pr2}$所以,这几乎节省了25%。不错。在
当然,构建数组所需的时间比将内容放在迭代器中要长,但即使考虑到这一点,性能仍有9%的提高。在你的用例中,用1.6GB来换取9%的加速是合理的。在
请记住,我只是在一个预先存在的100K列表中构建一个100K对象的数组;在磁盘上读取100M个对象时,I/O可能会成为一个严重的因素,而且迭代处理(允许您将CPU开销与磁盘等待时间交错)可能会做得更好。在
换句话说,您需要使用自己的真实数据和场景进行测试。但你已经知道了。在
对于更广泛的实现,使用简单的perf测试框架,请参见this pastebin。在
你可以尝试结合不同的方法。例如,您可以使用来自
itertools
的grouper
配方,一次批处理32K个纯文本,然后用numpy处理每一批,以获得两者的最佳效果。然后pool.imap
进行numpy处理,以获得所有3个的最佳结果。或者,也可以将一个大的numpy
数组放入共享内存,并使每个多处理任务处理该数组的一个片段。在相关问题 更多 >
编程相关推荐