0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

哈希算法是什么,哈希游戏系统开发方案

開發丨KFZ433 来源:開發丨KFZ433 作者:開發丨KFZ433 2022-06-14 09:14 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

什么是哈希/Hash

哈希又称作“散列”,是一种数学计算机程序,它接收任何一组任意长度的输入信息,通过哈希算法变换成固定长度的数据指纹输出形式,如字母和数字的组合,该输出就是“哈希值”。

总体而言,哈希算法可理解为一种消息摘要算法,将消息或数据压缩变小并拥有固定格式。由于其单向运算具有一定的不可逆性,哈希算法已成为加密算法中一个构成部分,但完整的加密机制不能仅依赖哈希算法。
在一个cache系统中,需要实现一个域名白名单,域名为下列数据:

、、sohu.com等

该白名单需要在程序启动时加载一次,主要执行查询操作。请设计一个数据结构和相应的初始化查询函数,使得检索尽可能的快。(不能使用stl::map,等等key-value刑类库)。

哈希是将任意长的输入编程加密的固定长度输出的过程。哈希并不等同于加密方法,因为无法解密哈希值来获取原始数据。事实上哈希是一种单向加密函数。

With a hash function,data on the Internet can be saved as a fixed length string.One method is SHA-256(secure hash algorithm-256 bits).SHA-256 is the successor of SHA-1,and the output of SHA-1 is 160 bits.

这些函数使用位运算使得每一个字符都对最后的函数值产生影响。

//ELF Hash Function

unsigned int ELFHash(char*str)

{

unsigned int hash=0;

unsigned int x=0;

while(*str)

{

hash=(hash<<4)+(*str++);//hash左移4位,当前字符ASCII存入hash低四位。

if((x=hash&0xF0000000L)!=0)

{//如果最高的四位不为0,则说明字符多余7个,如果不处理,再加第九个字符时,第一个字符会被移出,因此要有如下处理。

//该处理,如果对于字符串(a-z或者A-Z)就会仅仅影响5-8位,否则会影响5-31位,因为C语言使用的算数移位

hash^=(x>>24);

//清空28-31位。

hash&=~x;

}

}

//返回一个符号位为0的数,即丢弃最高位,以免函数外产生影响。(我们可以考虑,如果只有字符,符号位不可能为负)

return(hash&07FFFFFFF);

}

//该散列算法是基于贝尔实验室的彼得J温伯格的的研究。

//在Compilers一书中(原则,技术和工具),建议采用这个算法的散列函数的哈希方法。

unsigned int PJWHash(const char*str)

{

unsigned int BitsInUnignedInt=(unsigned int)(sizeof(unsigned int)*8);

unsigned int ThreeQuarters=(unsigned int)((BitsInUnignedInt*3)/4);

unsigned int6(unsigned int)(BitsInUnignedInt/8);

unsigned int HighBits=(unsigned int)(0xFFFFFFFF)<<(BitsInUnignedInt

-OneEighth);

unsigned int hash=0;

unsigned int test=0;

while(*str)

{

hash=(hash<)+(*str++);<>

if((test=hash&HighBits)!=0)

{

hash=((hash^(test>>ThreeQuarters))&(~HighBits));

}

}

return(hash&0x7FFFFFFF);

}

审核编辑:符乾江

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 函数
    +关注

    关注

    3

    文章

    4423

    浏览量

    68042
  • 哈希算法
    +关注

    关注

    1

    文章

    56

    浏览量

    11188
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    CDB47xxx评估套件:音频系统开发的得力助手

    CDB47xxx评估套件:音频系统开发的得力助手 在音频系统开发领域,Cirrus Logic的CDB47xxx评估套件是一款备受关注的工具。它为工程师们提供了一个便捷、高效的平台,用于评估和开发
    的头像 发表于 05-11 16:10 98次阅读

    Python AI 数字化实战:从 Pandas 自动化到 DeepSeek “星逻系统开发,无密

    精髓:哈希映射与多级维度的极速定位 在处理海量数据时,“查找”是最耗时的环节。Pandas之所以快,其另一大技术支柱在于其精密的索引系统。 初学者常按行号盲目筛选,而高效的自动化处理高度依赖“索引对齐
    发表于 04-30 13:43

    2022全新版!Java分布式架构设计与开发实战(完结)

    2022全新版!Java分布式架构设计与开发实战(完结) 分库分表实战:Java海量数据存储架构设计 在现代互联网应用中,随着业务规模的指数级增长,数据库性能瓶颈已成为制约系统发展的关键因素。当单
    发表于 03-30 15:20

    RK3562 单板机系统开发完全手册:U-Boot/Kernel/Rootfs 开发与性能优化

    本文为创龙科技RK3562 单板机 Linux 系统开发指南,核心包含 SDK 配置、内核与文件系统开发、分区配置及 CPU/GPU/NPU 调频等关键技术。文档详细说明镜像制作、程序自启动
    的头像 发表于 02-05 17:20 641次阅读
    RK3562 单板机<b class='flag-5'>系统开发</b>完全手册:U-Boot/Kernel/Rootfs <b class='flag-5'>开发</b>与性能优化

    OPC UA 服务端用户认证的底层逻辑:哈希与加盐应用详解

    用户信息至关重要。本文不涉及复杂的代码实现,而是通过分析典型服务端配置文件中的相关机制,阐述哈希算法(SHA-256)与加盐(Salt)机制在OPCUA登录环节的具
    的头像 发表于 01-15 17:29 388次阅读
    OPC UA 服务端用户认证的底层逻辑:<b class='flag-5'>哈希</b>与加盐应用详解

    ADI Trinamic如何让伺服系统开发化繁为简

    “刚搞定FOC算法调试,又卡在编码器协议解码;好不容易凑齐分立器件,却发现系统功耗超标”——这大概是不少伺服系统开发者的日常。随着设备中的电机数量日渐增多,传统开发模式下的硬件堆叠、软
    的头像 发表于 01-06 14:49 512次阅读
    ADI Trinamic如何让伺服<b class='flag-5'>系统开发</b>化繁为简

    深入浅出GMSSL:掌握SM2、SM3、SM4国密算法的高效实践

    随着国家信息安全战略的推进,国密算法在各类安全系统中的应用日益广泛。GMSSL作为支持国密标准的重要工具库,为开发者提供了SM2(非对称加密)、SM3(哈希
    的头像 发表于 12-12 18:20 1160次阅读
    深入浅出GMSSL:掌握SM2、SM3、SM4国密<b class='flag-5'>算法</b>的高效实践

    CW32F030C8T6数字签名实战

    加密库(如mbedTLS、WolfSSL)实现数字签名。常见算法包括RSA、ECDSA。 2.2 基于SHA和RSA的签名流程 生成哈希值:使用SHA-256对固件计算哈希值。 私钥签名:用
    发表于 11-19 08:03

    CW32F030C8T6数字签名的实战指南

    加密库(如mbedTLS、WolfSSL)实现数字签名。常见算法包括RSA、ECDSA。 2.2 基于SHA和RSA的签名流程 生成哈希值:使用SHA-256对固件计算哈希值。 私钥签名:用
    发表于 11-18 06:35

    Molex OTS零哈希电缆组件技术解析与应用指南

    Molex现成(OTS)零哈希电缆组件是标准分立式电线电缆组件,设计用于应对电子设备日益缩小的挑战。这些电缆组件提供节省空间的薄型解决方案,具有创新的双点接触特性,有2、4、6和8电路尺寸可供选择
    的头像 发表于 11-17 16:44 961次阅读

    MD5信息摘要算法实现一(基于蜂鸟E203协处理器)

    命名为“Q”,则message_var=Q[(32*i):(32*i+31)]。 4、哈希运算(Hash Operation) 此部分为MD5算法的核心。MD5有4组主循环,每组的主循环需要进行16轮
    发表于 10-30 07:18

    睿擎混合部署方案:基于QT的电机驱动系统开发|技术集结

    一、方案核心概述本方案旨在解决系统开发中“高性能实时控制”与“丰富人机交互”的需求矛盾。它采用混合部署的架构,将系统清晰地分为两个层面:1.实时层:部署在睿擎派设备的RT-Thread
    的头像 发表于 09-11 18:33 5717次阅读
    睿擎混合部署<b class='flag-5'>方案</b>:基于QT的电机驱动<b class='flag-5'>系统开发</b>|技术集结

    哈希极化到零拥塞:主动路径规划在RoCE网络中的负载均衡实践

    集群整体性能的瓶颈。本文将探讨哈希极化的成因、影响,并介绍一种通过主动路径规划(PPD)来优化网络配置、提升性能的解决方案
    的头像 发表于 07-21 17:27 2204次阅读
    从<b class='flag-5'>哈希</b>极化到零拥塞:主动路径规划在RoCE网络中的负载均衡实践

    明远智睿SSD2351:开启嵌入式系统开发新时代

    在当今科技飞速发展的时代,嵌入式系统已经广泛应用于各个领域,从智能家居到工业自动化,从智能交通到医疗设备,嵌入式系统无处不在。而开发板作为嵌入式系统开发的核心工具,其性能和功能直接影响
    的头像 发表于 07-15 15:47 787次阅读

    明远智睿SSD2351:嵌入式系统开发的卓越之选

    在嵌入式系统开发这一充满挑战与机遇的领域,一款出色的开发板就如同开发者手中的利器,能助力他们披荆斩棘,创造出令人惊叹的成果。明远智睿SSD2351便是这样一款集性能、功能与易用性于一身的杰出代表,正
    的头像 发表于 07-15 15:46 822次阅读