Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
Docs Menu

ClientEncryption.encrypt() (método mongosh)

ClientEncryption.encrypt(keyId, value, algorithm or encOptions)

ClientEncryption.encrypt() cifra el value utilizando el keyId especificado y el algoritmo especificado por algorithm o encOptions. encrypt() admite el cifrado explícito (manual) de los valores de campo.

Devuelve:

Un objeto binary data con subtipo 6.

Este comando está disponible en implementaciones alojadas en los siguientes entornos:

  • MongoDB Atlas: El servicio totalmente administrado para implementaciones de MongoDB en la nube.
  • MongoDB Enterprise: La versión basada en suscripción y autogestionada de MongoDB

  • MongoDB Community: La versión de MongoDB con código fuente disponible, de uso gratuito y autogestionada.

clientEncryption = db.getMongo().getClientEncryption()
clientEncryption.encrypt(
keyId,
value,
algorithm or encOptions,
)
Parameter
Tipo
Descripción

keyId

UUID

La clave de cifrado de datos que se utilizará para cifrar el value.

El UUID es un objeto BSON binary data con subtipo 4 que identifica una clave de cifrado de datos específica. Si la clave de cifrado de datos no existe en el almacén de claves configurado para la conexión a la base de datos, encrypt() devuelve un error.Consulte Colecciones de almacenes de claves para obtener más información sobre almacenes de claves y claves de cifrado de datos.

value

El valor a cifrar.

algorithm or encOptions

string o documento

  • Para cifrar explícitamente campos con Cifrado a nivel de campo del lado del cliente:

    Especifica el algorithm como una string o encOptions como un documento que contenga el campo algorithm.

    Los algoritmos compatibles son:

    • AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic

    • AEAD_AES_256_CBC_HMAC_SHA_512-Random

    Para ver ejemplos, consulte la sección "Configurar el algoritmo de cifrado a nivel de campo del lado del cliente".

    Para la documentación completa sobre los algoritmos de cifrado admitidos, consulta Campos y tipos de cifrado.

  • Para encriptar explícitamente campos usando Queryable Encryption:

    Especifica el algorithm como una string o encOptions como un documento que contenga los campos:

    • algorithm: El algoritmo de cifrado que se utiliza para cifrar el value. Los algoritmos compatibles son:

      • indexed: Admite consultas de igualdad.

      • range: Admite query de rango.

      • string: Admite query de prefijo, sufijo y subcadena.

      • unindexed: Para campos cifrados no consultables.

      Los nombres de los algoritmos no distinguen entre mayúsculas y minúsculas.

    • contentionFactor: Requerido cuando algorithm está configurado en indexed, range o string. Relacionado con la frecuencia de los valores para este campo.

    • queryType: El tipo de query a ejecutar en el campo cifrado. Los valores admitidos son:

      • "equality": Utilice con el algoritmo indexed para query coincidencias exactas.

      • "range": Utilícelo con el algoritmo range para query valores dentro de un rango.

      • "prefix": Utilícelo con el algoritmo string para query valores que comiencen con una string.

      • "suffix": Utilícelo con el algoritmo string para query valores que terminan con una string.

      • "substring": Únelo con el algoritmo string para query valores que contengan un string.

    Para ver ejemplos, consulte la sección "Configurar el algoritmo de cifrado consultable".

    Para obtener detalles sobre los algoritmos de cifrado admitidos, consulte Algoritmos y tipos de query.

Los métodos de cifrado a nivel de campo y consultables del lado del cliente mongosh requieren una conexión a la base de datos configurada para el cifrado del lado del cliente. Si la conexión actual a la base de datos no se inició con el cifrado a nivel de campo del lado del cliente habilitado, se producirá uno de los siguientes errores:

or

No se puede utilizar encrypt() para cifrar valores con los siguientes tipos BSON:

  • minKey

  • maxKey

  • null

  • undefined

Si se cifra un campo usando AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic, encrypt() no admite los siguientes tipos BSON:

  • double

  • decimal128

  • bool

  • object

  • array

El siguiente ejemplo utiliza un KMS gestionado localmente para la configuración de cifrado a nivel de campo en el lado del cliente.

1
  1. Inicia mongosh

    Ejecuta:

    mongosh --nodb

    --nodb significa no conectarse a una base de datos.

  2. Generar un String

    Genera una cadena base de 64 96bytes:

    const TEST_LOCAL_KEY = require("crypto").randomBytes(96).toString("base64")
  3. Crear un objeto de opciones de cifrado

    Para crear un objeto de opciones de cifrado de nivel de campo del lado del cliente, utilice la string TEST_LOCAL_KEY del paso anterior:

    var autoEncryptionOpts = {
    "keyVaultNamespace" : "encryption.__dataKeys",
    "kmsProviders" : {
    "local" : {
    "key" : BinData(0, TEST_LOCAL_KEY)
    }
    }
    }
  4. Cree un objeto cliente cifrado

    Para crear un objeto cliente cifrado, utiliza el constructor Mongo(). Reemplace el URI mongodb://myMongo.example.net por el URI de la cadena de conexión para el clúster de destino. Por ejemplo:

    encryptedClient = Mongo(
    "mongodb://myMongo.example.net:27017/?replSetName=myMongo",
    autoEncryptionOpts
    )
2

Recupere el objeto ClientEncryption y utilice el método ClientEncryption.encrypt() para cifrar un valor utilizando una clave de cifrado de datos específica UUID y un algoritmo de cifrado:

clientEncryption = encryptedClient.getClientEncryption();
clientEncryption.encrypt(
UUID("64e2d87d-f168-493c-bbdf-a394535a2cb9"),
"123-45-6789",
"AEAD_AES_256_CBC_HMAC_SHA_512-Random"
)

También puede especificar el algoritmo utilizando un documento con un campo algorithm:

clientEncryption = encryptedClient.getClientEncryption();
clientEncryption.encrypt(
UUID("64e2d87d-f168-493c-bbdf-a394535a2cb9"),
"123-45-6789",
{ algorithm: "AEAD_AES_256_CBC_HMAC_SHA_512-Random" }
)

Si tiene éxito, encrypt() devuelve el valor cifrado:

BinData(6,"AmTi2H3xaEk8u9+jlFNaLLkC3Q/+kmwDbbWrq+h9nuv9W+u7A5a0UnpULBNZH+Q21fAztPpU09wpKPrju9dKfpN1Afpj1/ZhFcH6LYZOWSBBOAuUNjPLxMNSYOOuITuuYWo=")

Para obtener la documentación completa sobre cómo iniciar conexiones MongoDB con el cifrado a nivel de campo en el lado del cliente activado, consulte Mongo().

El siguiente ejemplo utiliza un KMS gestionado de forma local para la configuración de Queryable Encryption.

1
  1. Inicia mongosh

    Inicie el cliente mongosh.

    mongosh --nodb
  2. Genere su clave

    Para configurar Queryable Encryption para una clave gestionada localmente, genere una string base64codificada en 96bytes sin saltos de línea.

    const TEST_LOCAL_KEY = require("crypto").randomBytes(96).toString("base64")
  3. Crea las opciones de Queryable Encryption

    Crea las opciones de Queryable Encryption usando la string de clave local generada:

    var autoEncryptionOpts = {
    "keyVaultNamespace" : "encryption.__dataKeys",
    "kmsProviders" : {
    "local" : {
    "key" : BinData(0, TEST_LOCAL_KEY)
    }
    }
    }
  4. Crea tu cliente cifrado

    Utilice el Mongo() constructor con las opciones de Queryable Encryption configuradas para crear una conexión de base de datos. Reemplaza el URI mongodb://myMongo.example.net con el URI de cadena de conexión del clúster de destino.

    encryptedClient = Mongo(
    "mongodb://myMongo.example.net:27017/?replSetName=myMongo",
    autoEncryptionOpts
    )
2

Recupere el objeto ClientEncryption y utilice el método ClientEncryption.encrypt() para cifrar un valor utilizando una clave de cifrado de datos específica UUID y un algoritmo de cifrado:

const eDB = "encrypted"
const eKV = "__keyVault"
const clientEncryption = encryptedClient.getClientEncryption();
const keyVaultClient = Mongo().getDB(eDB).getCollection(eKV)
const dek = keyVaultClient.findOne({ keyAltNames: "dataKey1" })
clientEncryption.encrypt(
dek._id,
"123-45-6789",
"Unindexed"
)

También puedes especificar el algoritmo utilizando un documento que contenga los campos:

  • algorithm

  • queryType

  • contentionFactor

const eDB = "encrypted"
const eKV = "__keyVault"
const clientEncryption = encryptedClient.getClientEncryption();
const keyVaultClient = Mongo().getDB(eDB).getCollection(eKV)
const dek = keyVaultClient.findOne({ keyAltNames: "dataKey1" })
clientEncryption.encrypt(
dek._id,
"123-45-6789",
{
algorithm: "Indexed",
queryType: "equality",
contentionFactor: 8
}
)

Si tiene éxito, encrypt() devuelve el valor cifrado:

Binary(Buffer.from("05b100000005640020000000005ab3581a43e39a8e855b1ac87013e841735c09d19ae86535eea718dd56122ba50573002000000000703d2cba9832d90436c6c92eb232aa5b968cdcd7a3138570bc87ef0a9eb3a0e905630020000000009cb61df010b1bb54670a5ad979f25f4c48889059dfd8920782cf03dd27d1a50b05650020000000003f5acea703ea357d3eea4c6a5b19139a580089341424a247839fd4d5cf0d312a12636d00040000000000000000", "hex"), 6)

Para obtener la documentación completa sobre cómo iniciar conexiones MongoDB con el cifrado a nivel de campo en el lado del cliente activado, consulte Mongo().