我正在尝试弄清到目前为止我是否正确。只是觉得我在追自己的尾巴,但我确实觉得也许我理解正确。
我有这个文件,其中包含校验和很短的校验和。这是一组两个文件,一个是我在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");
}
}