hash hashC语言中的hash函数

hash hash  时间:2022-03-02  阅读:()

C语言中的hash函数

Hash,一般翻译做"散列",也有直接音译为"哈希"的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。 HASH主要用于信息安全领域中加密算法,它把一些不同长度的信息转化成杂乱的128位的编码里,叫做HASH值. 也可以说,hash就是找到一种数据内容和数据存放地址之间的映射关系。Hash算法在信息安全方面的应用主要体现在以下的3个方面:文件校验、数字签名、鉴权协议 程程序实现 // 说明:Hash函数(即散列函数)在程序设计中的应用目标 ------ 把一个对象通过某种转换机制对应到一个 //size_t类型(即unsigned long)的整型值。 // 而应用Hash函数的领域主要是 hash表(应用非常广)、密码等领域。 // 实现说明: // ⑴、这里使用了函数对象以及泛型技术,使得对所有类型的对象(关键字)都适用。 // ⑵、常用类型有对应的偏特化,比如string、char*、各种整形等。 // ⑶、版本可扩展,如果你对某种类型有特殊的需要,可以在后面实现专门化。 // ⑷、以下实现一般放在头文件中,任何包含它的都可使用hash函数对象。 //------------------------------------实现------------------------------------------------ #include <string> using std::string; inlinesize_thash_str(const char* s) { unsigned long res = 0; for (; *s; ++s) res = 5 * res + *s; returnsize_t(res); } template <class Key> struct hash { erator () (const Key& k) const; }; // 一般的对象,比如:vector< queue<string> >;的对象,需要强制转化 template < class Key > size_thash<Key>::operator () (const Key& k) const { size_tres = 0; size_tlen = sizeof(Key); const char* p = reinterpret_cast<const char*>(&k); while (len--) { res = (res<<1)^*p++; } return res; } // 偏特化 template<> size_thash< string >::operator () (const string& str) const { return hash_str(str.c_str()); } typedef char* PChar; template<> size_thash<PChar>::operator () (const PChar& s) const { return hash_str(s); } typedef const char* PCChar; template<> size_thash<PCChar>::operator () (const PCChar& s) const { return hash_str(s); } template<> size_t hash<char>::operator () (const char& x) const { return x; } template<> size_t hash<unsigned char>::operator () (const unsigned char& x) const { return x; } template<> size_t hash<signed char>::operator () (const signed char& x) const { return x; } template<> size_t hash<short>::operator () (const short& x) const { return x; } template<> size_t hash<unsigned short>::operator () (const unsigned short& x) const { return x; } template<> size_t hash<int>::operator () (const int& x) const { return x; } template<> size_t hash<unsigned int>::operator () (const unsigned int& x) const { return x; } template<> size_t hash<long>::operator () (const long& x) const { return x; } template<> size_t hash<unsigned long>::operator () (const unsigned long& x) const { return x; } // 使用说明: // // ⑴、使用时首先由于是泛型,所以要加上关键字类型。 // // ⑵、其次要有一个函数对象,可以临时、局部、全局的,只要在作用域就可以。 // // ⑶、应用函数对象作用于对应类型的对象。 //----------------------- hash函数使用举例 ------------------------- #include <iostream> #include <vector> #include <string> using namespace std; int main() { vector<string> vstr⑵; vstr[0] = "sjw"; vstr[1] = "suninf"; hash<string> strhash; // 局部函数对象 cout << " Hash value: " << strhash(vstr[0]) << endl; cout << " Hash value: " << strhash(vstr[1]) << endl; cout << " Hash value: " << hash< vector<string> >() (vstr) << endl; cout << " Hash value: " << hash<int>() (100) << endl; // hash<int>() 临时函数对象 return 0; }

VPSMS:53元/月KVM-512MB/15G SSD/1TB/洛杉矶CN2 GIA

VPSMS最近在做两周年活动,加上双十一也不久了,商家针对美国洛杉矶CN2 GIA线路VPS主机提供月付6.8折,季付6.2折优惠码,同时活动期间充值800元送150元。这是一家由港人和国人合资开办的VPS主机商,提供基于KVM架构的VPS主机,美国洛杉矶安畅的机器,线路方面电信联通CN2 GIA,移动直连,国内访问速度不错。下面分享几款VPS主机配置信息。CPU:1core内存:512MB硬盘:...

ProfitServer$34.56/年,5折限时促销/可选西班牙vps、荷兰vps、德国vps/不限制流量/支持自定义ISO

ProfitServer怎么样?ProfitServer好不好。ProfitServer是一家成立于2003的主机商家,是ITC控股的一个部门,主要经营的产品域名、SSL证书、虚拟主机、VPS和独立服务器,机房有俄罗斯、新加坡、荷兰、美国、保加利亚,VPS采用的是KVM虚拟架构,硬盘采用纯SSD,而且最大的优势是不限制流量,大公司运营,机器比较稳定,数据中心众多。此次ProfitServer正在对...

百纵科技(1399元/月)香港CN2站群232IP

湖南百纵科技有限公司是一家具有ISP ICP 电信增值许可证的正规公司,多年不断转型探索现已颇具规模,公司成立于2009年 通过多年经营积累目前已独具一格,公司主要经营有国内高防服务器,香港服务器,美国服务器,站群服务器,东南亚服务器租用,国内香港美国云服务器,以及全球专线业务!活动方案:主营:1、美国CN2云服务器,美国VPS,美国高防云主机,美国独立服务器,美国站群服务器,美国母机。2、香港C...

hash hash为你推荐
连接池什么叫做“连接池机制”起英文名取个英文名全球随机视频网全球随机视频网怎么打字和别人聊天?开房数据库ODBC数据库是什么呢?海淀区公司注册注册海淀公司需要验资报告吗省份证查询如何免费查询个人身份证号码归属地及姓名fshow神禧年是什么?amv格式电影AMV格式的电影有哪些!存储系统ROM是什么存储器?手机话费余额查询中国移动的话费余额怎么查询?
免费申请域名 美国翻墙 香港新世界电讯 ftp教程 bgp双线 共享主机 免费活动 服务器是干什么的 isp服务商 linux服务器维护 Updog 常州联通宽带 国外视频网站有哪些 工信部网站备案查询 阿里dns 阿里云邮箱个人版 googlevoice 腾讯云平台 ddos攻击小组 qq空间打开慢 更多