Skip to contents

Returns a fast, cryptographically-strong SipHash keyed hash of the supplied object or file. SipHash-1-3 is optimised for performance. Note: SipHash is not a cryptographic hash algorithm.


siphash13(x, key = NULL, convert = TRUE, file)



object to hash. A character string or raw vector (without attributes) is hashed 'as is'. All other objects are stream hashed using R serialization (but without allocation of the serialized object).


[default NULL] a character string or raw vector comprising the 16 byte (128 bit) key data, or else NULL which is equivalent to '0'. If a longer vector is supplied, only the first 16 bytes are used, and if shorter, padded with trailing '0'. Note: for character vectors only the first element is used.


[default TRUE] if TRUE, the hash is converted to its hex representation as a character string, if FALSE, output directly as a raw vector, or if NA, a vector of (32-bit) integer values.


character file name / path. If specified, 'x' is ignored. The file is stream hashed, thus capable of handling files larger than memory.


A character string, raw or integer vector depending on 'convert'.

R Serialization Stream Hashing

Where this is used, serialization is always version 3 big-endian represenation and the headers (containing R version and native encoding information) are skipped to ensure portability across platforms.


The SipHash family of cryptographically-strong pseudorandom functions (PRFs) are described in 'SipHash: a fast short-input PRF', Jean-Philippe Aumasson and Daniel J. Bernstein, Paper 2012/351, 2012, Cryptology ePrint Archive at

This implementation is based on the SipHash streaming implementation by Daniele Nicolodi, David Rheinsberg and Tom Gundersen at This is in turn based on the SipHash reference implementation by Jean-Philippe Aumasson and Daniel J. Bernstein released to the public domain at


# SipHash-1-3 hash as character string:
siphash13("secret base")
#> [1] "48c60a316babef0e"

# SipHash-1-3 hash as raw vector:
siphash13("secret base", convert = FALSE)
#> [1] 48 c6 0a 31 6b ab ef 0e

# SipHash-1-3 hash using a character string key:
siphash13("secret", key = "base")
#> [1] "a790b03148f72cce"

# SipHash-1-3 hash using a raw vector key:
siphash13("secret", key = charToRaw("base"))
#> [1] "a790b03148f72cce"

# SipHash-1-3 hash a file:
file <- tempfile(); cat("secret base", file = file)
siphash13(file = file)
#> [1] "48c60a316babef0e"