如何为F#中的ShipHash创建密钥的16字节数组?

问题描述 投票:0回答:2

我正在编写需要哈希值的代码。 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#中有没有办法做到这一点?

hash f#
2个回答
0
投票

我想我明白了:

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个字节的问题。不确定该语法。

© www.soinside.com 2019 - 2024. All rights reserved.