如何猜测校验和算法类型?

时间:2019-08-07 06:22:09

标签: checksum crc

我正在尝试弄清到目前为止我是否正确。只是觉得我在追自己的尾巴,但我确实觉得也许我理解正确。

我有这个文件,其中包含校验和很短的校验和。这是一组两个文件,一个是我在pastbin下复制的一个。我注意到第一个文件包含校验和,但是,如果我更改任何参数或序列号,该文件将无法加载。

我正确地假设软件会在字符串中添加一些xml值并创建校验和,然后将其与文件中的校验和进行比较?我不确定他们是如何能够在文件本身中添加校验和的,所以我想也许它只需要一些值。

第二,我是否正确地假设它们只是截断了校验和?我从未见过这么小的人。

最后,我试图弄清楚如何创建自己的校验和校准,但此刻,我试图至少了解其工作原理。远不能刹车:)

<?xml version="1.0" encoding="utf-8"?>
 <InstrumentData xmlns:i="http://www.w3.org/2001/XMLSchema-instance" 
  xmlns="http://schemas.datacontract.org/2004/07/AcquisitionEngine.Types">
  <CalibrationMode>parabolic</CalibrationMode>
  <CalibrationTemperatures 
 xmlns:d2p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
<d2p1:double>28</d2p1:double>
<d2p1:double>52</d2p1:double>
<d2p1:double>76</d2p1:double>
<d2p1:double>90</d2p1:double>
  </CalibrationTemperatures>
  <Checksum>6E23D45E</Checksum>
  <ClusterSize>1</ClusterSize>
  <HardwareVariant>Hardware_Legacy</HardwareVariant>
  <InstrumentID>undefined</InstrumentID>
  <LineFrequency>LineFrequency_50Hz</LineFrequency>
 <MaxCalibrationDeviation>0.152</MaxCalibrationDeviation>
 <SerialNo>6328ZG200015</SerialNo>
 <Version>3.2</Version>
  </InstrumentData>

第二个文件包含在此处https://pastebin.com/YQ1qKZ2v

更新:我已经能够找到生成此代码的代码,但是仍然没有得到相同的哈希值。

    private string GenerateChecksum(string serialno)
    {
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.Append(this.HardwareVariant);
        stringBuilder.Append(serialno);
        return HashGenerator.GetHash32AsHex(stringBuilder.ToString());
    }

从这一行开始,似乎要使用HadwareVariant和序列号。 是否似乎需要这样做并生成hash32,然后在其末尾添加X2?我的背景是php,但我理解这个正确吗?

  internal static class HashGenerator
{
    private static HashAlgorithm CryptographicHasher;

    static HashGenerator()
    {
        HashGenerator.CryptographicHasher = MD5.Create();
    }

    public static int GetHash32(string value)
    {
        byte[] bytes = Encoding.UTF8.GetBytes(value);
        return 

   BitConverter.ToInt32(HashGenerator.CryptographicHasher.ComputeHash(bytes), 0);
    }

    public static string GetHash32AsHex(string value)
    {
        return HashGenerator.GetHash32(value).ToString("X2");
    }
}

0 个答案:

没有答案