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() encrypts the value using the specified keyId and the algorithm specified by algorithm or encOptions. encrypt() supports explicit (manual) encryption of field values.

Devuelve:

Un objeto binary data con subtipo.6

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

  • MongoDB Atlas: El servicio totalmente gestionado 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 binary data BSON con subtipo 4 que identifica una llave de cifrado de datos específica. Si la llave de cifrado de datos no existe en la bóveda de llaves configurada para la conexión de base de datos, encrypt() devuelve un error. Consulte Colección de Bóvedas de Llaves para obtener más información sobre las bóvedas de llaves y las llaves 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

    For examples, see Set the Client-Side Field Level Encryption Algorithm.

    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

      • Unindexed

    • contentionFactorRequerido cuando algorithm está configurado en Indexed. Relacionado con la frecuencia de los valores para este campo.

    • queryTypeEl único tipo de query actualmente soportado es "equality". queryType debe establecerse cuando el algoritmo no sea Indexed.

    For examples, see Set the Queryable Encryption Algorithm.

    Para obtener detalles sobre los algoritmos de cifrado admitidos, consulta Elección de Algoritmo.

The mongosh client-side field level and queryable encryption methods require a database connection configured for client-side encryption. If the current database connection was not initiated with client-side field level encryption enabled, either:

or

You cannot use encrypt() to encrypt values with the following BSON types:

  • minKey

  • maxKey

  • null

  • undefined

If encrypting a field using AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic, encrypt() does not support the following BSON types:

  • 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

Retrieve the ClientEncryption object and use the ClientEncryption.encrypt() method to encrypt a value using a specific data encryption key UUID and encryption algorithm:

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" }
)

If successful, encrypt() returns the encrypted value:

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

Retrieve the ClientEncryption object and use the ClientEncryption.encrypt() method to encrypt a value using a specific data encryption key UUID and encryption algorithm:

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: 4
}
)

If successful, encrypt() returns the encrypted value:

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().