SQL EncryptByKey无法处理插入,适用于更新

时间:2015-10-13 01:29:30

标签: sql-server encryption insert

我在插入查询中实现加密,但是在解密时代码是不可读的。但是 - 当我使用更新加密相同的记录时,记录正确解密

进行测试,我使用以下代码来确定正在进行的操作

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'但它没有

实际表上的

我在解密时得到一组类似的字符,就像上面使用加密插入插入的记录查询一样

任何人都知道发生了什么?

--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

2 个答案:

答案 0 :(得分:2)

我认为你必须对nvarchar使用'abc123'所以第一个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

答案 1 :(得分:0)

以下INSERT代码正在运行:

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

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