当前位置: 首页 > 知识库问答 >
问题:

计算pickle文件的熵

秦安宁
2023-03-14

我正在处理ISCXVPN2016数据集,它由一些pcap文件组成(每个pcap都是特定应用程序(如skype、youtube等)的流量捕获),我已将它们转换为pickle文件,然后使用以下代码将其写入文本文件

pkl = open("AIMchat2.pcapng.pickle", "rb")
with open('file.txt', 'w') as f:
    for Item in pkl:
        f.write('%s\n' %Item)

file.txt:

b'\x80\x03]q\x00(cnumpy.core.multiarray\n'b'_reconstruct\n'b'q\x01cNumpy\n'b'ndarray\n'b'q\x02K\x00\x85q\x03C\x01bq\x04\x87q\x05Rq\x06(K\x01K\x9d\x85q\x07cNumpy\n'b'dtype\n'b'q\x08X\x02\x00\x00\x00u1q\tK\x00K\x01\x87q\n'b'Rq\x0b(K\x03X\x01\x00\x00\x00|q\x0cNNNJ\xff\xff\xff\xff\xffJ\xff\xff\xff\xff\xffK\x00tq\rb\x89C\x9dE\x00\x00\x9dU\xbc@\x00\x80\x06\xd7\xc9\x83\xca\xf0W@\x0c\x18\xa74I\x01\xbb\t].\xc8\xf3*\xc51P\x18\xfa[)j\x00\x00\x17\x03\x02\x00p\x14\x90\xccY|\xa3\x7f\xd1\x12\xe2\xb4。U9)\xf20\xf1{\xbd\x1d\xa3W\x0c\x19\xc2\xf0\x8c\x0b\x8c\x86\x16\x99\xd8:\x19\xb0G\xe7\xb2\xf4\x9d\x82\x8e

我的问题是如何计算每个pickle文件的熵?

(我已更新问题)

共有3个答案

郭云
2023-03-14

可以使用双熵、三熵或它们的加法三熵来计算pickle文件的熵。这些算法在www.arxiv.org上有描述,BiEntropy已经在Github上通过测试工具实现。BiEntropy已经在大型原始二进制文件上进行了测试

充小云
2023-03-14

一个简单的解决方案是gzip/tar文件。通过计算(sige-of-gzip/tar-file)/(sige-of-原始)来确定熵,作为对随机性的度量。
这个结果不准确,因为gzip和tar都不是理想的压缩器,但是随着文件大小的增长,结果会更加准确。
使用编写的python代码检查熵的一个很好的选择是:
http://code.activestate.com/recipes/577476-shannon-entropy-calculation/#c3

家浩瀚
2023-03-14

如果我没有做错,这就是答案(基于如何计算文件的熵?和香农熵)。

#!/usr/bin/env python3

import math


filename = "random_data.bin"

with open(filename, "rb") as file:
    counters = {byte: 0 for byte in range(2 ** 8)}  # start all counters with zeros

    for byte in file.read():  # read in chunks for large files
        counters[byte] += 1  # increase counter for specified byte

    filesize = file.tell()  # we can get file size by reading current position

    probabilities = [counter / filesize for counter in counters.values()]  # calculate probabilities for each byte

    entropy = -sum(probability * math.log2(probability) for probability in probabilities if probability > 0)  # final sum

    print(entropy)

在Ubuntu 18.04上用Python 3.6.9检查了ent程序:

$ dd if=/dev/urandom of=random_data.bin bs=1K count=16
16+0 records in
16+0 records out
16384 bytes (16 kB, 16 KiB) copied, 0.0012111 s, 13.5 MB/s
$ ent random_data.bin
Entropy = 7.988752 bits per byte.
...
$ ./calc_entropy.py
7.988751920202076

测试与文本文件也。

$ ent calc_entropy.py
Entropy = 4.613356 bits per byte.
...
$ ./calc_entropy.py
4.613355601248316
 类似资料:
  • 本文向大家介绍Python读取Pickle文件信息并计算与当前时间间隔的方法分析,包括了Python读取Pickle文件信息并计算与当前时间间隔的方法分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python读取Pickle文件信息并计算与当前时间间隔的方法。分享给大家供大家参考,具体如下: python—–读取Pickle文件信息计算出与当前的时间间隔 生成h_dic.pkl文件信

  • 问题内容: 我创建了一个小的python脚本。我将pickle文件保存在Linux上,然后在Windows上使用它,然后再次在Linux上使用它,但是现在该文件在Linux上不起作用,但是在Windows上可以正常工作。是这样,以便python是coss平台的,但pickle文件不是。有什么解决办法吗??? 问题答案: Python的泡菜是完全跨平台的。 这可能是由于Windows和Linux之间

  • 问题内容: 我通常使用大约20 Gb大小的文本文件,并且发现自己经常对给定文件中的行数进行计数。 我现在做的只是,而且需要很长时间。有什么解决方案会更快吗? 我在安装了Hadoop的高性能集群中工作。我想知道地图缩小方法是否可以提供帮助。 我希望解决方案像解决方案一样简单,只需一条生产线,但不确定其可行性。 有任何想法吗? 问题答案: 尝试: 猫也是不必要的:用您现在的方式就足够了。

  • 问题内容: 我有大型文本文件,范围在和之间。如何使用来计算文件中的行数? 我有这些限制: 整个文件不需要写入内存 不需要子进程来执行任务 问题答案: 不使用wc的解决方案: 速度较慢,但​​您可能没有想到的那么多-140M +文件的传输时间为0.6秒,包括node.js加载和启动时间

  • 我正在使用iTextSharp从PDF文件中读取文本。然而,有些时候我不能提取文本,因为PDF文件只包含图像。我每天下载同样的PDF文件,我想看看PDF是否被修改过。如果无法获得文本和修改日期,那么MD5校验和是判断文件是否已更改的最可靠方法吗? 如果是的话,一些代码示例将会很感激,因为我对密码学没有太多的经验。

  • 问题内容: 我正在研究 “使用信息获取,PCA和遗传算法的文本分类”, 但是在对文档执行 预处理 (词干,停用词删除,TFIDF)后,m困惑了如何继续进行信息获取部分。 我的 out文件 包含 word, 并且有 TFIDF 值。 像 WORD-TFIDF VALUE 在一起(单词)-0.235(tfidf值) come(word)-0.2548(tfidf值) 当使用weka进行信息获取(“ I