Sql 服务器非对称密钥解密到 Nvarchar 问题

Sql server asymmetric key decryption to Nvarchar issue

我在sql中遇到数据加密和解密问题,下面是我尝试过的场景。

•创建了 table(@TABLE),列类型为 NVARCHAR(MAX)。(尝试加密 FirstName、LastName、MiddleName、Country、TIN)

•创建存储过程以执行加密 ◦存储过程接受 NVARCHAR(MAX) 类型的输入参数,加密值,将值转换为 NVARCHAR(MAX) 类型和 returns 值。

CREATE PROCEDURE DNB_ENCRYPT    
(   
    @Value NVARCHAR(MAX),
    @EncryptedValue NVARCHAR(MAX) OUTPUT    
)    
AS
BEGIN

    IF NOT EXISTS (SELECT * FROM sys.asymmetric_keys WHERE name = 'ASymKeyPwd')
        CREATE ASYMMETRIC KEY ASymKeyPwd WITH ALGORITHM = RSA_2048 ENCRYPTION BY PASSWORD = N'18SomeHiddenPassword!96';

    IF NOT EXISTS (SELECT * FROM sys.symmetric_keys WHERE name = 'SymKey')
        CREATE SYMMETRIC KEY SymKey WITH ALGORITHM = AES_256 ENCRYPTION BY ASYMMETRIC KEY AsymKeyPwd;

    OPEN SYMMETRIC KEY SymKey DECRYPTION BY ASYMMETRIC KEY AsymKeyPwd WITH PASSWORD = N'18SomeHiddenPassword!96'    

    --INSERT INTO TESTTABLE(FIRSTNAME)VALUES(ENCRYPTBYKEY(KEY_GUID('SymKey'), @Value))

    SET @EncryptedValue = CONVERT(NVARCHAR(MAX), EncryptByKey(Key_GUID('SymKey'), @Value))
    CLOSE SYMMETRIC KEY SymKey;
END

•在@TABLE 之上创建视图,视图解密并returns table.

中的所有值
CONVERT(VARCHAR(MAX), DECRYPTBYKEYAUTOASYMKEY(ASYMKEY_ID('AsymKeyPwd'), N'18SomeHiddenPassword!96',  PRIMARYTIN))

问题与解密有关,一些值已正确解密,但我看到的是空值。

Joe - 楚簴䝌誉ꢁ裴柽 - Joe

Antony - 蠀簴二誉ꢁ裴柽 - Antony

123121312-砀簴䝌誉ꢁ罂粟- NULL

IN-蠀簴二誉ꢁ蔷薇-IN

US-蠀簴二誉ꢁ罂粟-NULL

如果 table 列的类型为 varbinary,则整个过程工作正常,但使用 nvarchar(max) 时,很少有值未按预期解密。我无法追踪问题。谁能帮我解决这个问题。

谢谢, 克里斯

解密部分语法错误

CONVERT(VARCHAR(MAX), DECRYPTBYKEYAUTOASYMKEY(ASYMKEY_ID('AsymKeyPwd'), N'18SomeHiddenPassword!96', PRIMARYTIN))

VARCHAR(MAX) 应该是 NVARCHAR(MAX),因为在所有其他地方它是 NVARCHAR( MAX) 类型.