Hash algorithms process bytes and know nothing of text encodings, line-endings, etc. If the bytes presented to a hash algorithm (SHA-1, MD5, Haval, etc.) differ in the slightest way, the resulting hash is completely different.
A recent problem encountered by a Chilkat customer was that an XML file contained bare LF line endings. When loaded into the MSXML parser, the line endings were converted to CRLF and therefore the SHA-1 hash result was different. To load a file exactly as-is into memory, read it as a binary file, or use the ChilkatCrypt2.ReadFile method. Here is an example showing the (incorrect) MSXML2 usage, as well as a correct ChilkatCrypt2.ReadFile usage:
Private Sub Command1_Click()
Dim crypt As New ChilkatCrypt2
Dim success As Long
success = crypt.UnlockComponent("30-day trial")
If (success <> 1) Then
MsgBox "Crypt component unlock failed"
Dim hashStr As String
crypt.EncodingMode = "base64"
crypt.HashAlgorithm = "sha-1"
crypt.Charset = "windows-1252"
' Read the contents of a file using MSXML2.
' The MSXML parser will convert line-endings to CRLF, therefore,
' if the file originally had bare LF line-endings, the SHA-1 hash will
' be different.
Dim xmlDocument As New MSXML2.DOMDocument
Dim xmlDoc As String
hashStr = crypt.HashStringENC(xmlDocument.xml)
Text1.Text = hashStr
' Read the contents of a file with no interpretation of the bytes
' and hash the contents.
Dim xmlData As Variant
xmlData = crypt.ReadFile("hmrc.xml")
hashStr = crypt.HashBytesENC(xmlData)
Text2.Text = hashStr