简介
FNV (Fowler/Noll/Vo) Swift 的哈希框架。
该框架包括 FNV-0(32/64位)、FNV-1(32/64位)、FNV-1a(32/64位) 函数。
原始的 FNV 算法由 Glenn Fowler、Landon Curt Noll 和 Kiem-Phong Vo 创建。
要求
- 平台
- iOS 10.0+
- macOS 10.12+
- tvOS 12.0+
- Linux
- Swift 4.2, 5.0
安装
CocoaPods
use_frameworks!
target 'target' do
pod 'FNV'
end
Carthage
github "daisuke-t-jp/FNV"
使用方法
引入框架
import FNV
生成摘要(单次)
FNV-0
/**
* 32 bit
*/
let digest = FNV.FNV0_32.digest("Hello World!")
// digest -> 0x6990d79d
let digestHex = FNV.FNV0_32.digestHex("Hello World!")
// digestHex -> "6990d79d"
/**
* 64bit
*/
let digest = FNV.FNV0_64.digest("Hello World!")
// digest -> 0xdd8b4a711cd6199d
let digestHex = FNV.FNV0_64.digestHex("Hello World!")
// digestHex -> "dd8b4a711cd6199d"
FNV-1
/**
* 32 bit
*/
let digest = FNV.FNV1_32.digest("Hello World!")
// digest -> 0x12a9a41c
let digestHex = FNV.FNV1_32.digestHex("Hello World!")
// digestHex -> "12a9a41c"
/**
* 64bit
*/
let digest = FNV.FNV1_64.digest("Hello World!")
// digest -> 0x8e59dd02f68c387c
let digestHex = FNV.FNV1_64.digestHex("Hello World!")
// digestHex -> "8e59dd02f68c387c"
FNV-1a
/**
* 32 bit
*/
let digest = FNV.FNV1a_32.digest("Hello World!")
// digest -> 0xb1ea4872
let digestHex = FNV.FNV1a_32.digestHex("Hello World!")
// digestHex -> "b1ea4872"
/**
* 64bit
*/
let digest = FNV.FNV1a_64.digest("Hello World!")
// digest -> 0x8c0ec8d1fb9e6e32
let digestHex = FNV.FNV1a_64.digestHex("Hello World!")
// digestHex -> "8c0ec8d1fb9e6e32"
生成摘要(流式)
FNV-0
/**
* 32 bit
*/
let fnv = FNV.FNV0_32()
fnv.update("Hello ")
fnv.update("World!")
let digest = fnv.digest()
// digest -> 0x6990d79d
let digestHex = fnv.digestHex()
// digestHex -> "6990d79d"
/**
* 64bit
*/
let fnv = FNV.FNV0_64()
fnv.update("Hello ")
fnv.update("World!")
let digest = fnv.digest()
// digest -> 0xdd8b4a711cd6199d
let digestHex = fnv.digestHex()
// digestHex -> "dd8b4a711cd6199d"
FNV-1
/**
* 32 bit
*/
let fnv = FNV.FNV1_32()
fnv.update("Hello ")
fnv.update("World!")
let digest = fnv.digest()
// digest -> 0x12a9a41c
let digestHex = fnv.digestHex()
// digestHex -> "12a9a41c"
/**
* 64bit
*/
let fnv = FNV.FNV1_64()
fnv.update("Hello ")
fnv.update("World!")
let digest = fnv.digest()
// digest -> 0x8e59dd02f68c387c
let digestHex = fnv.digestHex()
// digestHex -> "8e59dd02f68c387c"
FNV-1a
/**
* 32 bit
*/
let fnv = FNV.FNV1a_32()
fnv.update("Hello ")
fnv.update("World!")
let digest = fnv.digest()
// digest -> 0xb1ea4872
let digestHex = fnv.digestHex()
// digestHex -> "b1ea4872"
/**
* 64bit
*/
let fnv = FNV.FNV1a_64()
fnv.update("Hello ")
fnv.update("World!")
let digest = fnv.digest()
// digest -> 0x8c0ec8d1fb9e6e32
let digestHex = fnv.digestHex()
// digestHex -> "8c0ec8d1fb9e6e32"
Demo
有演示。