mysql fnv64函数_FNV哈希算法

目录

FNV哈希算法

FNV版本

FNV哈希分为3个版本:fnv-0(已废弃),FNV-1,FNV-1a

算法实现

FNV-0算法公式

hash = 0

for each byte_of_data to be hashed

hash = hash * FNV_prime

hash = hash ^ octet_of_data

return hash

FNV-1算法公式

hash = FNV_offset_basis

for each byte_of_data to be hashed

hash = hash * FNV_prime

hash = hash ^ byte_of_data

return hash

FNV-1a算法公式

hash = FNV_offset_basis

for each byte_of_data to be hashed

hash = hash ^ byte_of_data

hash = hash * FNV_prime

return hash

FNV公式参数说明

1. FNV_offset_basis

这个参数的值是固定的,根据不同的位数选择不同的值作为hash的首次填充值

位数

十进制值

32

2166136261

64

14695981039346656037

128

144066263297769815596495629667062367629

256

100029257958052580907070968620625704837092796014241193945225284501741471925557

512

965930312949666949800943540071631046609041874567263789610837432943446265799458293219771643844981305189220653980578449 5328239340083876191928701583869517785

1024

1419779506494762106872207064140321832088062279544193396087847491461758272325 22967323037177221508640965212023555493 65628174669108571814760471015076148029 75596980407732015769245856300321530495 71501574036444603635505054127112859663 61610267868082893823963790439336411086 884584107735010676915

2. FNV_prime

还没有看懂,不过这不影响我们实现通用32位,64位的FNV算法

位数

十进制值

32

16777619

64

1099511628211

128

309485009821345068724781371

256

374144419156711147060143317175368453031918731002211

512

35835915874844867368919076489095108449946327955754392558399825615420669938882575126094039892345713852759

1024

5016456510113118655434598811035278955030765345404790744303017523831112055108147451509157692220295382716162651878526895249385292291816524375083746691371804094271873160484737966720260389217684476157468082573

3. hash

hash后的最总结果

4. byte_of_data

8位无符号整数

5. hashed

要加密的数据,需要转换成byte_of_data[]然后循环^计算

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值