Compartir a través de


DECRYPTBYKEYAUTOASYMKEY (Transact-SQL)

Se aplica a:SQL ServerAzure SQL Managed Instance

Esta función descifra los datos cifrados. Primero descifra una clave simétrica con una clave asimétrica independiente y, a continuación, descifra los datos cifrados con la clave simétrica extraída en el primer paso.

Convenciones de sintaxis de Transact-SQL

Sintaxis

DECRYPTBYKEYAUTOASYMKEY ( akey_ID , akey_password
    , { 'ciphertext' | @ciphertext }
  [ , { add_authenticator | @add_authenticator }
  [ , { authenticator | @authenticator } ] ] )

Argumentos

akey_ID

Es el identificador de la clave asimétrica que se usa para cifrar la clave simétrica. akey_ID tiene un tipo de datos int.

akey_password

La contraseña que protege la clave asimétrica. akey_password puede tener un NULL valor si la clave maestra de base de datos (DMK) protege la clave privada asimétrica. akey_password tiene un tipo de datos nvarchar.

ciphertext

Los datos cifrados con la clave. ciphertext tiene un tipo de datos varbinary.

@ciphertext

Una variable de tipo varbinary que contiene los datos cifrados con la clave simétrica.

add_authenticator

Indica si el proceso de cifrado original incluía, y cifraba, un autenticador junto con el texto sin formato. Debe coincidir con el valor pasado a ENCRYPTBYKEY durante el proceso de cifrado de datos. add_authenticator tiene un valor de 1 si el proceso de cifrado usó un autenticador. add_authenticator tiene un tipo de datos int.

@add_authenticator

Una variable que indica si el proceso de cifrado original incluía, y cifraba, un autenticador junto con el texto sin formato. Debe coincidir con el valor pasado a ENCRYPTBYKEY durante el proceso de cifrado de datos. @add_authenticator tiene un tipo de datos int.

authenticator

Los datos que se usaron como base para la generación del autenticador. Debe coincidir con el valor proporcionado a ENCRYPTBYKEY. autenticador tiene un tipo de datos sysname.

@authenticator

Una variable que contiene datos a partir de los que se genera un autenticador. Debe coincidir con el valor proporcionado a ENCRYPTBYKEY. @authenticator tiene un tipo de datos sysname.

@add_authenticator

Una variable que indica si el proceso de cifrado original incluía, y cifraba, un autenticador junto con el texto sin formato. Debe coincidir con el valor pasado a ENCRYPTBYKEY durante el proceso de cifrado de datos. @add_authenticator tiene un tipo de datos int.

authenticator

Los datos que se usaron como base para la generación del autenticador. Debe coincidir con el valor proporcionado a ENCRYPTBYKEY. autenticador tiene un tipo de datos sysname.

@authenticator

Una variable que contiene datos a partir de los que se genera un autenticador. Debe coincidir con el valor proporcionado a ENCRYPTBYKEY. @authenticator tiene un tipo de datos sysname.

Tipos de retorno

varbinary, con un tamaño máximo de 8 000 bytes.

Observaciones

DECRYPTBYKEYAUTOASYMKEY combina las funciones de OPEN SYMMETRIC KEY y DECRYPTBYKEY. En una sola operación, primero descifra una clave simétrica y después la usa para descifrar el texto cifrado.

Permisos

Se requiere el permiso VIEW DEFINITION en la clave simétrica y el permiso CONTROL en la clave asimétrica.

Ejemplos

En este ejemplo se muestra cómo DECRYPTBYKEYAUTOASYMKEY puede simplificar el código de descifrado. Este código debe ejecutarse en una AdventureWorks2025 base de datos que aún no tiene una DMK. Reemplace por <password> una contraseña segura.

--Create the keys and certificate.
USE AdventureWorks2022;

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
OPEN MASTER KEY DECRYPTION BY PASSWORD = '<password>';

CREATE ASYMMETRIC KEY SSN_AKey
    WITH ALGORITHM = RSA_2048;
GO

CREATE SYMMETRIC KEY SSN_Key_02
    WITH ALGORITHM = DES
    ENCRYPTION BY ASYMMETRIC KEY SSN_AKey;
GO

--
--Add a column of encrypted data.
ALTER TABLE HumanResources.Employee
    ADD EncryptedNationalIDNumber2 VARBINARY (128);

OPEN SYMMETRIC KEY SSN_Key_02 DECRYPTION BY ASYMMETRIC KEY SSN_AKey;

UPDATE HumanResources.Employee
    SET EncryptedNationalIDNumber2 = EncryptByKey(Key_GUID('SSN_Key_02'), NationalIDNumber);
GO

--Close the key used to encrypt the data.
CLOSE SYMMETRIC KEY SSN_Key_02;
--
--There are two ways to decrypt the stored data.
--
--OPTION ONE, using DecryptByKey()
--1. Open the symmetric key.
--2. Decrypt the data.
--3. Close the symmetric key.

OPEN SYMMETRIC KEY SSN_Key_02 DECRYPTION BY ASYMMETRIC KEY SSN_AKey;

SELECT NationalIDNumber,
       EncryptedNationalIDNumber2 AS 'Encrypted ID Number',
       CONVERT (NVARCHAR, DecryptByKey(EncryptedNationalIDNumber2)) AS 'Decrypted ID Number'
FROM HumanResources.Employee;

CLOSE SYMMETRIC KEY SSN_Key_02;

--OPTION TWO, using DECRYPTBYKEYAUTOASYMKEY()
SELECT NationalIDNumber,
       EncryptedNationalIDNumber2 AS 'Encrypted ID Number',
       CONVERT (NVARCHAR, DECRYPTBYKEYAUTOASYMKEY(AsymKey_ID('SSN_AKey'), NULL, EncryptedNationalIDNumber2)) AS 'Decrypted ID Number'
FROM HumanResources.Employee;
GO