我正在尋找編碼使用散列函數存儲在字符串中的一組十六進制值。由於十六進制「英文字母」僅由16個字母組成,因此碰撞最少的最佳散列算法是什麼?什麼是十六進制字符串的最佳散列函數?
0
A
回答
1
這是一個過於籠統的問題,因爲您忽略了對散列函數的任何約束,以及/或者您將如何處理散列。 (在旁註中,哈希不是編碼)
這就是說,有一個16個字母的字母表,你需要4位來存儲每個(即你可以建立一個XOR總和每兩個字母擠進一個單一的字節,得到一個8位的散列
當然,這可以擴展到任何其他字長,太(但你留下了太多信息)
比如像這樣:
uint8_t
hexhash(const char *str)
{
uint8_t res = 0;
while (*str && *(str+1)) {
res ^= (fromchar(*str) << 4) | fromchar(*(str+1));
str += 2;
//編輯:忘了這在我原來的答覆
}
return res;
}
(其中 'fromchar' 是爲 '0' 返回0的函數,1 '1',...,15爲 'F' )
相關問題
- 1. 散列字母數字字符串到16字節十六進制字符串
- 2. 十六進制字符串到十六進制整數
- 3. Javascript - 十進制字符串的十六進制字符串
- 4. 巴什 - 十六進制字符串
- 5. 字符串十六進制格式的含義是什麼?
- 6. SHA256十六進制字符串是什麼樣的?
- 7. 什麼是十六進制?
- 8. 插入/替換散列值:「十六進制字符串包含非十六進制字符」
- 9. 十六進制字符到實際十六進制字符的字符串
- 10. 從十六進制字符串轉換爲十六進制字符數組
- 11. 字符串爲十六進制和十六進制轉換爲字符串
- 12. PHP將字符串轉換爲十六進制和十六進制字符串
- 13. 爲什麼散列函數像sha1最多隻能使用16個不同的字符(十六進制)?
- 14. 轉換十六進制字符串十六進制值
- 15. 將字符串轉換爲十六進制到十六進制
- 16. python字符串與十六進制轉義十六進制值
- 17. 十六進制字符串爲整數
- 18. 十六進制值的字符串格式爲十六進制數字排序
- 19. 十進制數字符串轉換爲十六進制的字符串
- 20. C++將十六進制字符串轉換爲十六進制char *十六進制數字
- 21. 將字符串十進制轉換爲十六進制數
- 22. 將十六進制字節字符串列表轉換爲十六進制整數列表的最簡單方法是什麼?
- 23. 將十六進制字符串數組轉換爲十六進制數組
- 24. 十六進制的字符串的Python
- 25. 十六進制串&十六進制
- 26. 什麼是十進制數字的最佳掩碼?
- 27. 什麼十六進制字符串的capstrinao
- 28. 十六進制字符串SWI-Prolog的
- 29. 的Javascript十六進制字符串fromCharCode
- 30. 十六進制字符串到二進制字符串
'atoi(str);'或者它在C++中是等價的,那麼碰撞將不會達到MAX_INT。 –
@AkiSuihkonen碰撞釋放MAX_INT和未定義的行爲,沒有辦法做到有意義的錯誤恢復。這就是爲什麼我們現在有strtol()。請不要推薦使用atoi()。 – fstd
沒有理由相信任何熟知的通用散列函數(例如djb2或murmur(僅舉兩個簡單示例))對於十六進制字符串的執行效果不佳,或者至少不會比其他任何散列函數執行得更差。超短密鑰(1-3字節)總是非常糟糕,沒有多少人可以做到這一點,任何合理的工作都相當好。 – Damon