Do not modify CRC on return, so several calls for return will return same value.

This commit is contained in:
2018-01-17 23:36:02 +00:00
parent db4ddcc666
commit 4311ca59d3
3 changed files with 15 additions and 15 deletions

View File

@@ -90,9 +90,8 @@ namespace DiscImageChef.Checksums
/// </summary> /// </summary>
public byte[] Final() public byte[] Final()
{ {
hashInt ^= CRC16_SEED;
BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian; BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian;
return BigEndianBitConverter.GetBytes(hashInt); return BigEndianBitConverter.GetBytes(hashInt ^ CRC16_SEED);
} }
/// <summary> /// <summary>
@@ -100,12 +99,11 @@ namespace DiscImageChef.Checksums
/// </summary> /// </summary>
public string End() public string End()
{ {
hashInt ^= CRC16_SEED;
StringBuilder crc16Output = new StringBuilder(); StringBuilder crc16Output = new StringBuilder();
BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian; BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian;
for(int i = 0; i < BigEndianBitConverter.GetBytes(hashInt).Length; i++) for(int i = 0; i < BigEndianBitConverter.GetBytes(hashInt ^ CRC16_SEED).Length; i++)
crc16Output.Append(BigEndianBitConverter.GetBytes(hashInt)[i].ToString("x2")); crc16Output.Append(BigEndianBitConverter.GetBytes(hashInt ^ CRC16_SEED)[i].ToString("x2"));
return crc16Output.ToString(); return crc16Output.ToString();
} }

View File

@@ -90,9 +90,8 @@ namespace DiscImageChef.Checksums
/// </summary> /// </summary>
public byte[] Final() public byte[] Final()
{ {
hashInt ^= CRC32_SEED;
BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian; BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian;
return BigEndianBitConverter.GetBytes(hashInt); return BigEndianBitConverter.GetBytes(hashInt ^ CRC32_SEED);
} }
/// <summary> /// <summary>
@@ -100,12 +99,11 @@ namespace DiscImageChef.Checksums
/// </summary> /// </summary>
public string End() public string End()
{ {
hashInt ^= CRC32_SEED;
StringBuilder crc32Output = new StringBuilder(); StringBuilder crc32Output = new StringBuilder();
BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian; BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian;
for(int i = 0; i < BigEndianBitConverter.GetBytes(hashInt).Length; i++) for(int i = 0; i < BigEndianBitConverter.GetBytes(hashInt ^ CRC32_SEED).Length; i++)
crc32Output.Append(BigEndianBitConverter.GetBytes(hashInt)[i].ToString("x2")); crc32Output.Append(BigEndianBitConverter.GetBytes(hashInt ^ CRC32_SEED)[i].ToString("x2"));
return crc32Output.ToString(); return crc32Output.ToString();
} }
@@ -144,7 +142,13 @@ namespace DiscImageChef.Checksums
} }
for(int i = 0; i < fileStream.Length; i++) for(int i = 0; i < fileStream.Length; i++)
{
localhashInt = (localhashInt >> 8) ^ localTable[fileStream.ReadByte() ^ (localhashInt & 0xff)]; localhashInt = (localhashInt >> 8) ^ localTable[fileStream.ReadByte() ^ (localhashInt & 0xff)];
if((localhashInt ^ CRC32_SEED) == 0xB883C628 || (localhashInt ^CRC32_SEED) == 0x28C683B8)
{
System.Console.WriteLine("CRC found at position {0}", fileStream.Position);
}
}
localhashInt ^= CRC32_SEED; localhashInt ^= CRC32_SEED;
BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian; BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian;

View File

@@ -89,9 +89,8 @@ namespace DiscImageChef.Checksums
/// </summary> /// </summary>
public byte[] Final() public byte[] Final()
{ {
hashInt ^= CRC64_SEED;
BigEndianBitConverter.IsLittleEndian = BigEndianBitConverter.IsLittleEndian; BigEndianBitConverter.IsLittleEndian = BigEndianBitConverter.IsLittleEndian;
return BigEndianBitConverter.GetBytes(hashInt); return BigEndianBitConverter.GetBytes(hashInt ^= CRC64_SEED);
} }
/// <summary> /// <summary>
@@ -99,12 +98,11 @@ namespace DiscImageChef.Checksums
/// </summary> /// </summary>
public string End() public string End()
{ {
hashInt ^= CRC64_SEED;
StringBuilder crc64Output = new StringBuilder(); StringBuilder crc64Output = new StringBuilder();
BigEndianBitConverter.IsLittleEndian = BigEndianBitConverter.IsLittleEndian; BigEndianBitConverter.IsLittleEndian = BigEndianBitConverter.IsLittleEndian;
for(int i = 0; i < BigEndianBitConverter.GetBytes(hashInt).Length; i++) for(int i = 0; i < BigEndianBitConverter.GetBytes(hashInt ^= CRC64_SEED).Length; i++)
crc64Output.Append(BigEndianBitConverter.GetBytes(hashInt)[i].ToString("x2")); crc64Output.Append(BigEndianBitConverter.GetBytes(hashInt ^= CRC64_SEED)[i].ToString("x2"));
return crc64Output.ToString(); return crc64Output.ToString();
} }