Consiste en crear una clave de encriptación, en mi caso la he creado asimétrica. Se almacena en un campo tipo varbinary.
Código:
CREATE ASYMMETRIC KEY ClaveAsimetrica
WITH ALGORITHM = RSA_2048
ENCRYPTION BY PASSWORD = '$$Clave$$'
Para insertar un valor encriptado (es una cadena de texto normal y corriente, con todos los caracteres ASCII.
Código:
DECLARE @KEYID INT
SET @KEYID = AsymKey_ID('ClaveAsym')
INSERT INTO TARJETAS (NUMERO)
VALUES (EncryptByAsymKey(@KEYID, 'Cadena a encriptar'))
Así el valor aparece ilegible.
Hasta aquí todo correcto. El problema viene al hacer el proceso inverso:
Código:
DECLARE @KEYID INT
SET @KEYID = AsymKey_ID('ClaveAsym')
SELECT CAST(DecryptByAsymKey(@KEYID,numero, N'$$Clave$$') AS VARCHAR(100))
FROM TARJETAS
Éste es el paso que me devuelve vacío. En teoría, el resultado es una cadena tipo nvarchar (unicode), pero como se ve en todos los ejemplos, hago el paso a varchar para que sea correctamente leído.
El resultado debería ser la cadena que codificamos al comienzo: "Cadena a encriptar". Es perfectamente imprimible. Es más, te digo la cadena exacta que debería devolver en mi caso: sgm. Como ves, no hay caracteres raros.
Pues bien, todo ello va a la perfección en SQL Server Management Studio, pero no desde ASP. El resultado es una cadena NULA. No lo entiendo...
Gracias por el tiempo!!