Returns a SHA-256 hash of the supplied object or file, or HMAC if a secret key is supplied.
Arguments
- x
object to hash. A character string or raw vector (without attributes) is hashed as is. All other objects are stream hashed using native R serialization.
- key
if
NULL
, the SHA-256 hash ofx
is returned. If a character string or raw vector, this is used as a secret key to generate an HMAC. Note: for character vectors, only the first element is used.- convert
logical
TRUE
to convert the hash to its hex representation as a character string,FALSE
to return directly as a raw vector, orNA
to return as a vector of (32-bit) integers.- file
character file name / path. If specified,
x
is ignored. The file is stream hashed, and the file can be larger than memory.
R Serialization Stream Hashing
Where this is used, serialization is always version 3 big-endian representation and the headers (containing R version and native encoding information) are skipped to ensure portability across platforms.
As hashing is performed in a streaming fashion, there is no materialization of, or memory allocation for, the serialized object.
References
The SHA-256 Secure Hash Standard was published by the National Institute of Standards and Technology (NIST) in 2002 at https://csrc.nist.gov/publications/fips/fips180-2/fips180-2.pdf.
This implementation is based on one by 'The Mbed TLS Contributors' under the 'Mbed TLS' Trusted Firmware Project at https://www.trustedfirmware.org/projects/mbed-tls.
Examples
# SHA-256 hash as character string:
sha256("secret base")
#> [1] "1951c1ca3d50e95e6ede2b1c26fefd0f0e8eba1e51a837f8ccefb583a2b686fe"
# SHA-256 hash as raw vector:
sha256("secret base", convert = FALSE)
#> [1] 19 51 c1 ca 3d 50 e9 5e 6e de 2b 1c 26 fe fd 0f 0e 8e ba 1e 51 a8 37 f8 cc
#> [26] ef b5 83 a2 b6 86 fe
# SHA-256 hash a file:
file <- tempfile(); cat("secret base", file = file)
sha256(file = file)
#> [1] "1951c1ca3d50e95e6ede2b1c26fefd0f0e8eba1e51a837f8ccefb583a2b686fe"
unlink(file)
# SHA-256 HMAC using a character string secret key:
sha256("secret", key = "base")
#> [1] "14b24e4c66bd03c1d6b59bc59e1e47468a437001662ae4be2cb30e0483e13e44"
# SHA-256 HMAC using a raw vector secret key:
sha256("secret", key = charToRaw("base"))
#> [1] "14b24e4c66bd03c1d6b59bc59e1e47468a437001662ae4be2cb30e0483e13e44"