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

Hostodo:$34.99/年KVM-2.5GB/25G NVMe/8TB/3个数据中心

Hostodo在九月份又发布了两款特别套餐,开设在美国拉斯维加斯、迈阿密和斯波坎机房,基于KVM架构,采用NVMe SSD高性能磁盘,最低1.5GB内存8TB月流量套餐年付34.99美元起。Hostodo是一家成立于2014年的国外VPS主机商,主打低价VPS套餐且年付为主,基于OpenVZ和KVM架构,美国三个地区机房,支持支付宝或者PayPal、加密货币等付款。下面列出这两款主机配置信息。CP...

香港站群多ip服务器多少钱?零途云香港站群云服务器怎么样?

香港站群多ip服务器多少钱?想做好站群的SEO优化,最好给每个网站都分配一个独立IP,这样每个网站之间才不会受到影响。对做站群的站长来说,租用一家性价比高且提供多IP的香港多ip站群服务器很有必要。零途云推出的香港多ip站群云服务器多达256个IP,可以满足站群的优化需求,而且性价比非常高。那么,香港多ip站群云服务器价格多少钱一个月?选择什么样的香港多IP站群云服务器比较好呢?今天,小编带大家一...

快云科技:夏季大促销,香港VPS7.5折特惠,CN2 GIA线路; 年付仅不到五折巨惠,续费永久同价

快云科技怎么样?快云科技是一家成立于2020年的新起国内主机商,资质齐全 持有IDC ICP ISP等正规商家。我们秉承着服务于客户服务于大众的理念运营,机器线路优价格低。目前已注册用户达到5000+!主营产品有:香港弹性云服务器,美国vps和日本vps,香港物理机,国内高防物理机以及美国日本高防物理机!产品特色:全配置均20M带宽,架构采用KVM虚拟化技术,全盘SSD硬盘,RAID10阵列, 国...

hash hash为你推荐
项目质量管理工程项目质量管理制度有哪些eofexceptionjava中dis.readutf报错java.io.EOFException网页图标网站ICO图标若想全部添加到网页中,有什么简便方法吗?fast路由器FAST/迅捷无线路由器怎么设置站内搜索引擎搜索引擎工作原理与如何建立站内搜索sd卡座SD卡座有能满足CE认证的吗?暂停线程怎么让一个线程暂停购物网站设计Jsp+Sql电子商城&网上购物网站设计购物网站设计凡客诚品,当当网、卓越网、淘宝、京东商城等电子商务网站的网页设计与功能不同gps简介GPS技术 简介
国外虚拟空间 西安虚拟主机 主机点评 nerd 正版win8.1升级win10 警告本网站 免费网络电视 上海域名 jsp空间 老左来了 腾讯实名认证中心 优酷黄金会员账号共享 免费的asp空间 中国电信网络测速 我的世界服务器ip 国外在线代理服务器 ledlamp lamp兄弟连 云服务是什么意思 国外代理服务器 更多