Hash,一般翻譯做"散列",也有直接音譯為"哈希"的,就是把任意長度的輸入(又叫做預映射,pre-image),通過散列算法,變換成固定長度的輸出,該輸出就是散列值。這種轉換是一種壓縮映射,也就是,散列值的空間通常遠小于輸入的空間,不同的輸入可能會散列成相同的輸出,而不可能從散列值來唯一的確定輸入值。簡單的說就是一種將任意長度的消息壓縮到某一固定長度的消息摘要的函數。
HASH主要用于信息安全領域中加密算法,它把一些不同長度的信息轉化成雜亂的128位的編碼里,叫做HASH值.也可以說,hash就是找到一種數據內容和數據存放地址之間的映射關系。Hash算法在信息安全方面的應用主要體現在以下的3個方面:文件校驗、數字簽名、鑒權協議
程程序實現
//說明:Hash函數(即散列函數)在程序設計中的應用目標------把一個對象通過某種轉換機制對應到一個
//size_t類型(即unsignedlong)的整型值。
//而應用Hash函數的領域主要是hash表(應用非常廣)、密碼等領域。
//實現說明:
//⑴、這里使用了函數對象以及泛型技術,使得對所有類型的對象(關鍵字)都適用。
//⑵、常用類型有對應的偏特化,比如string、char*、各種整形等。
//⑶、版本可擴展,如果你對某種類型有特殊的需要,可以在后面實現專門化。
//⑷、以下實現一般放在頭文件中,任何包含它的都可使用hash函數對象。
//------------------------------------實現------------------------------------------------
#include<string>
usingstd::string;
inlinesize_thash_str(constchar*s)
{
unsignedlongres=0;
for(;*s;++s)
res=5*res+*s;
returnsize_t(res);
}
template<classKey>
structhash
{
size_toperator()(constKey&k)const;
};
//一般的對象,比如:vector<queue<string>>;的對象,需要強制轉化
template<