Shamil Salakhetdinov
shamil at smsconsulting.spb.ru
Sat Mar 19 08:21:26 CDT 2011
Hi All -- Sorry I have mentioned 6 millions cycles but my sample was for just 5 millions, and I have got some collisions for 8 bytes long surrogate keys. Here I'm posting a patch for hashing part of the code - and no collisions now for 8 bytes long hashes for 5 millions cycles. .... UInt64 longHashResult = 0xFFFFFFFFFFFFFFFF; UInt64 longHash = 0xFFFFFFFFFFFFFFFF; int shiftCounter = 0; foreach (byte b in hashValue) { longHash ^= b; longHash = longHash << 8 + 0xFF; if (++shiftCounter == 8) { longHashResult ^= longHash; shiftCounter = 0; } } longHash = longHashResult; ... Started at: 19/03/2011 16:08:53 19/03/2011 16:09:04: i=1000000, cs=0, cu=0 19/03/2011 16:09:17: i=2000000, cs=0, cu=0 19/03/2011 16:09:33: i=3000000, cs=0, cu=0 19/03/2011 16:09:49: i=4000000, cs=0, cu=0 19/03/2011 16:10:06: i=5000000, cs=0, cu=0 TOTALS: Min String Length = 7 Max String Length = 25 Avg String Length = 15.4966972 Test cases Qty = 5000000 Collisions Qty = 0 ulong Collisions Qty = 0 Finished at: 19/03/2011 16:10:06 Please correct me if I've got wrong somewhere. Thank you. -- Shamil -----Original Message----- From: dba-vb-bounces at databaseadvisors.com [mailto:dba-vb-bounces at databaseadvisors.com] On Behalf Of Shamil Salakhetdinov Sent: 19 ????? 2011 ?. 16:04 To: stuart at lexacorp.com.pg; 'Discussion concerning Visual Basic and related programming issues.' Subject: Re: [dba-VB] SHA1 to compute a hash Hi Stuart and John, <<< AFAIK, no one other than you has found any >>> Yes, I was also confused how it comes to get SHA1 hashes collisions but then I have thought that John probably "compacts" SHA1 hashes into 8 bytes surrogate keys? Here (P.S.) is a "quick&dirty" "brute force" test code - 4 collisions for 6 millions cycles for 8 bytes keys. Please correct me if you find some errors in my sample code Thank you. -- Shamil <<< snip >>>