Binary 测量两个二进制文件之间的相似性?

Binary 测量两个二进制文件之间的相似性?,binary,comparison,similarity,Binary,Comparison,Similarity,我有两个G729编码的文件,我取了它们的pcm版本。我想测量这两个文件之间的相似性。这些文件是二进制文件,因此如何衡量二进制文件之间的相似性,我用C编写了一个代码,从第一个文件中提取模式,并在第二个文件中搜索相似的模式,但我想有一个相似性度量。。。。我在文献中搜索了很多,找到了杰卡德和其他人,但仍然无法确定他们中哪一个符合我的情况。 提前感谢您的帮助。既然您提到这些文件是音频文件,那么最好根据音频特征定义相似性度量,而不是简单地进行二进制比较。快速搜索产生了一个研究项目,名为“你可能想寻找进一步

我有两个G729编码的文件,我取了它们的pcm版本。我想测量这两个文件之间的相似性。这些文件是二进制文件,因此如何衡量二进制文件之间的相似性,我用C编写了一个代码,从第一个文件中提取模式,并在第二个文件中搜索相似的模式,但我想有一个相似性度量。。。。我在文献中搜索了很多,找到了杰卡德和其他人,但仍然无法确定他们中哪一个符合我的情况。
提前感谢您的帮助。

既然您提到这些文件是音频文件,那么最好根据音频特征定义相似性度量,而不是简单地进行二进制比较。快速搜索产生了一个研究项目,名为“你可能想寻找进一步的想法”。

我也有同样的需求,我提出了一个解决方案,在我的案例工作中,但我不能保证它是通用的:

我使用了一个创建diff文件的库。给定fileA和fileB,该库创建第三个fileDiff文件,告诉如何从fileA传递到fileB要复制哪些字节以及要添加哪些字节。(有关格式的详细信息:)

  • 我在Java中工作,所以我使用了javaxdelta:
  • 在这里,您可以实现一个名为DiffWriter的接口:
  • 最后,您知道从fileA到fileB复制了多少字节以及添加了多少字节
用一个函数,我得到一个百分比。 我知道这不是100%真实的,例如,如果你的fileB等于fileA的一半,那么函数的相似性是100%

这是DiffWriter实现:

public class Distance implements DiffWriter {

    private long newData = 0;
    private long copiedData = 0;

    @Override
    public void flush() throws IOException {}

    @Override
    public void close() throws IOException {}

    @Override
    public void addData(byte arg0) throws IOException {
        newData++;
    }

    @Override
    public void addCopy(long arg0, int arg1) throws IOException {
        copiedData += arg1;
    }

    public double getSimilarity() {

        double a = (double) newData;
        double c = (double) copiedData;

        return (( c / (c + a) ) * 100.0);

    }

}
我这样称呼它:

import com.nothome.delta.Delta;

    File f1 = new File(...);
    File f2 = new File(...);

            Distance dw = new Distance();

    try {
        new Delta().compute(f1, f2, dw);

        dw.getSimilarity();

    } catch (Exception e) {
        e.printStackTrace();
    }

您希望如何准确地量化“相似”?您希望每个样本都有绝对差异吗?最小二乘回归的R^2值?这两个文件是什么?我想找到一个比率来定义这两个文件之间的相似程度…这两个文件是G729编解码器的输出…我们可以从每个文件中提取20字节的帧,测量这两个字符串之间的相似性,并在最后取平均值…足够了吗?首先感谢你的回答…我正在尝试这样做明文级的密码分析…我是说二进制级的…我想比较一下编码器的输出…谢谢