Definición
Nuevo en la versión 8.3.
Sintaxis
$hexHash tiene la siguiente sintaxis:
{ $hexHash: { input: <expression>, algorithm: <string> } }
Comportamiento
$hexHash devuelve una string hexadecimal en mayúsculas. La longitud del resultado depende del algoritmo:
algoritmo | Longitud de la salida (caracteres) |
|---|---|
| 32 |
| 64 |
| 16 |
Si input se resuelve en null o indefinido, o se refiere a un campo ausente, $hexHash retorna null.
Si input se resuelve en un tipo diferente a una UTF-8 string o BinData, $hexHash devuelve un error.
Si algorithm no es uno de los valores aceptados, $hexHash devuelve un error.
Importante
MD5 no es un algoritmo criptográficamente seguro y no es adecuado para aplicaciones sensibles a la seguridad. Si estás aplicando hashing a información confidencial, usa "sha256" en su lugar.
MD5 también está deshabilitado en el modo FIPS. Si tu implementación se ejecuta con el modo FIPS habilitado, utiliza "sha256" o "xxh64" en su lugar.
Ejemplos
Los siguientes ejemplos utilizan una colección denominada files junto con este document:
db.files.insertMany( [ { _id: 1, filename: "report.pdf" } ] )
Hashear un valor de campo
El siguiente ejemplo calcula el hash hexadecimal SHA-256 del campo filename:
db.files.aggregate( [ { $project: { filename: 1, hexHash: { $hexHash: { input: "$filename", algorithm: "sha256" } } } } ] )
[ { _id: 1, filename: 'report.pdf', hexHash: '6466E450A16B77B865C5829D6B6C56D9F892956475642DBEB9CCC4340FE01B15' } ]
El hexHash campo contiene la SHA-256 hash como una 64-carácter mayúsculas string hexadecimal. Para utilizar un algoritmo diferente, cambia el valor algorithm. Por ejemplo, "xxh64" produce una string de 16caracteres.
Null or Missing input
Si input es null, o input se refiere a un campo faltante, $hexHash devuelve null:
db.aggregate( [ { $documents: [ { val: null }, {} ] }, { $project: { hexHash: { $hexHash: { input: "$val", algorithm: "sha256" } } } } ] )
[ { hexHash: null }, { hexHash: null } ]