2013-06-24 2 views
0

У меня проблема, когда клиент вычисляет контрольную сумму для файла, а затем отправляет ее вместе с файлом через сокет на сервер. Сервер пересчитывает контрольную сумму файла и сравнивает ее с переданной контрольной суммой. Выход отладки следующий:Использует ли кодирование символов хеш-алгоритмы, такие как MD5?

Server calculated checksum: 53613E7F8AB289BDDC1EBF1E0929F1FD 
<?xml version="1.0" encoding="utf-16"?> 
<TestHistory> 
    <TestHistory> 
    <SerialNumber>13231312</SerialNumber> 
    <PrinterFamily>Tabletop</PrinterFamily> 
    <StartTime>1371515505</StartTime> 
    <EndTime>1371515510</EndTime> 
    <TestStation>PreCal</TestStation> 
    <TestResult>P</TestResult> 
    <FailureResult> 
    </FailureResult> 
    <NetworkDomainName>zgn</NetworkDomainName> 
    <TestPCName>01-93RZheng</TestPCName> 
    <TestSoftwareVersion>0.0.7</TestSoftwareVersion> 
    <TestSite>Jabil</TestSite> 
    <MAC_BT>00-G0-D0-86-CB-F7</MAC_BT> 
    <MAC_WiFi>00-S0-D0-26-BD-X7</MAC_WiFi> 
    <MAC_Wired>00-B0-D0-81-BB-L7</MAC_Wired> 
    <SKU>1rf3</SKU> 
    <WorkOrder>1313231</WorkOrder> 
    <Firmware_MLB>3.1321.bd2</Firmware_MLB> 
    <DateEntered /> 
    <PrintheadMFGInfo>ee1</PrintheadMFGInfo> 
    <PrintheadSN>13-21</PrintheadSN> 
    </TestHistory> 
</TestHistory> 

.

Client calculated checksum: 0AFE9F429DE4C6E675297FA861C0CCA9 
<?xml version="1.0" encoding="utf-16"?> 
<TestHistory> 
    <TestHistory> 
    <SerialNumber>13231312</SerialNumber> 
    <PrinterFamily>Tabletop</PrinterFamily> 
    <StartTime>1371515505</StartTime> 
    <EndTime>1371515510</EndTime> 
    <TestStation>PreCal</TestStation> 
    <TestResult>P</TestResult> 
    <FailureResult> 
    </FailureResult> 
    <NetworkDomainName>zgn</NetworkDomainName> 
    <TestPCName>01-93RZheng</TestPCName> 
    <TestSoftwareVersion>0.0.7</TestSoftwareVersion> 
    <TestSite>Jabil</TestSite> 
    <MAC_BT>00-G0-D0-86-CB-F7</MAC_BT> 
    <MAC_WiFi>00-S0-D0-26-BD-X7</MAC_WiFi> 
    <MAC_Wired>00-B0-D0-81-BB-L7</MAC_Wired> 
    <SKU>1rf3</SKU> 
    <WorkOrder>1313231</WorkOrder> 
    <Firmware_MLB>3.1321.bd2</Firmware_MLB> 
    <DateEntered /> 
    <PrintheadMFGInfo>ee1</PrintheadMFGInfo> 
    <PrintheadSN>13-21</PrintheadSN> 
    </TestHistory> 
</TestHistory> 

Используя стандартный инструмент сравнения на файловую части выходов указует на то, что нет никаких различий в двух файлах, которые приводят меня к мысли, что кодирование или что-то другое вызывает несовпадение контрольной суммы.

+3

Вы заметили, что на вашей клиентской версии отсутствует заголовок ''? разные входы = разные хэши ... даже «важные» данные идентичны. –

+0

ошибки, которые были ошибкой копии, исправлены – wonton

ответ

3

Да; это конечно.

Хэш-алгоритмы работают с необработанными байтами.

Если вы хотите хэш-строку, вам нужно каким-то образом преобразовать символы в байты.

Различные кодировки приведут к различным байтам.

Кроме того, каждый символ будет содержать байты, которые влияют на хеш, даже такие символы, как <?xml.