我正在编写需要哈希值的代码。 SipHash似乎是一个不错的选择。
let getSipHashValue (buffer:byte []) (key:byte []) =
match key.GetLength(0) with
| 16 -> SipHash24.Hash64(buffer, key)
| _ -> uint64(0)
是否有办法将密钥填充到16个字节并确保其有效?
我可以得到长度确切的单词作为关键字,但是我希望能够使用任何单词(少于16个字节),并且只需使用一些填充。
open System
open System.Text
let testKey : byte [] =
Encoding.UTF8.GetBytes "accumulativeness"
Console.WriteLine("Length: {0}", testKey.GetLength(0))
F#中有没有办法做到这一点?
我想我明白了:
open System
open System.Text
let rec getPaddedBytes (s:string) =
let b = Encoding.UTF8.GetBytes s
match b.GetLength(0) with
| 16 -> b
| x when x < 16 -> getPaddedBytes (s + "0")
| _ -> b[0..15]
Console.WriteLine("Length: {0}", testKey.GetLength(0))
let testBytes = getPaddedBytes "accum"
let testString = Encoding.UTF8.GetString testBytes
Console.WriteLine("X: {0}", testString)
我需要解决获取前16个字节的问题。不确定该语法。