SQL EncryptByKey 不适用于插入,适用于更新

SQL EncryptByKey not working on insert, works on update

我正在对插入查询实施加密,但解密时代码不可读。然而 - 当我使用更新加密同一条记录时,记录被正确解密

为了测试,我使用了以下代码来确定发生了什么

SELECT
 EncryptByKey(Key_GUID('Data_Enc_Key'), 'abc123') as Encrypted,
 CONVERT(nvarchar(50),DecryptByKey(
    CONVERT(varbinary(128),EncryptByKey(Key_GUID('Data_Enc_Key'), 'abc123'))
 )) as Decrypted

理论上应该加密 相同的值 'abc123' 但不是

在实际 table 上,我在解密时得到了一组与上面查询使用加密插入

插入的记录相似的字符

有人知道发生了什么事吗?

--OPEN CERTIFICATE
OPEN SYMMETRIC KEY Enc_Key DECRYPTION BY CERTIFICATE ENC_CERT

----WORKS
Update tblMembers
SET password_enc = EncryptByKey(
        Key_GUID('Enc_Key'),
        password
        )
WHERE
id = XXX
AND email = XXX

----DOES NOT WORK - ON DECRYPTION INCORRECT RESULT
INSERT INTO tblMembers (email,password,password_enc) VALUES ('abc@mail.com','abc123', EncryptByKey(Key_GUID('Enc_Key'),'abc123'))


-- DECRYPT FOR BOTH INSERT AND UPDATE
select 
TOP 5 *
,
        CONVERT(nvarchar,
            DecryptByKey(
                password_enc                
                )
            )

from tblMembers
WHERE id = XXX
AND email = XXX

我认为你必须对 'abc123' 使用 nvarchar 所以第一个 SELECT 语句应该是

SELECT
 EncryptByKey(Key_GUID('Data_Enc_Key'), N'abc123') as Encrypted,
 CONVERT(nvarchar(50),DecryptByKey(
    CONVERT(varbinary(128),EncryptByKey(Key_GUID('Data_Enc_Key'), N'abc123'))
 )) as Decrypted

以下 INSERT 代码有效:

INSERT INTO tblMembers (email,password,password_enc)
VALUES (
   'abc@mail.com',
   'abc123', 
   EncryptByKey(Key_GUID('Enc_Key'), N'abc123')
)

最后一行EncryptByKey要求字符串abc123在字符串前有N