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; }

HostNamaste$24 /年,美国独立日VPS优惠/1核1G/30GB/1Gbps不限流量/可选达拉斯和纽约机房/免费Windows系统/

HostNamaste是一家成立于2016年3月的印度IDC商家,目前有美国洛杉矶、达拉斯、杰克逊维尔、法国鲁贝、俄罗斯莫斯科、印度孟买、加拿大魁北克机房。其中洛杉矶是Quadranet也就是我们常说的QN机房(也有CC机房,可发工单让客服改机房);达拉斯是ColoCrossing也就是我们常说的CC机房;杰克逊维尔和法国鲁贝是OVH的高防机房。采用主流的OpenVZ和KVM架构,支持ipv6,免...

华纳云新人下单立减40元/香港云服务器月付60元起,香港双向CN2(GIA)

华纳云(HNCloud Limited)是一家专业的全球数据中心基础服务提供商,总部在香港,隶属于香港联合通讯国际有限公司,拥有香港政府颁发的商业登记证明,保证用户的安全性和合规性。 华纳云是APNIC 和 ARIN 会员单位。主要提供数据中心基础服务、互联网业务解决方案, 以及香港服务器租用、香港服务器托管、香港云服务器、美国云服务器,云计算、云安全技术研发等产品和服务。其中云服务器基于成熟的 ...

hosteons:10Gbps带宽,免费Windows授权,自定义上传ISO,VPS低至$21/年,可选洛杉矶达拉斯纽约

hosteons当前对美国洛杉矶、达拉斯、纽约数据中心的VPS进行特别的促销活动:(1)免费从1Gbps升级到10Gbps带宽,(2)Free Blesta License授权,(3)Windows server 2019授权,要求从2G内存起,而且是年付。 官方网站:https://www.hosteons.com 使用优惠码:zhujicepingEDDB10G,可以获得: 免费升级10...

hash hash为你推荐
返回电脑返回上一次页面的快捷键是什么eofexceptionjava中352627java.io.EOFException是什么意思eofexceptionjava.io.EOFException这是个什么异常应该怎么解决招行信用卡还款招行信用卡还款顺序是怎样的监控员工我现在在看监控一线员工的。如何做好看监控的工作?硬盘分区格式化新硬盘分区格式化有哪些方法?互动电视互动电视和有线电视的数字电视有什么区别暂停线程如何正确的更好的停止一个线程淘宝推广网站谁有好的淘宝推广网站介绍下哦!或推广技巧!无线互联网笔记本电脑之间可不可以实现无线互联?如果能,该怎么联接?
重庆vps租用 正版win8.1升级win10 http500内部服务器错误 美国php空间 新天域互联 稳定免费空间 华为云服务登录 彩虹云 闪讯官网 东莞主机托管 lamp架构 空间服务器 网站防护 hdroad 建站论坛 gotoassist 傲盾代理 德国代理 卡巴斯基免费版 paypal登陆 更多