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。
我正在对插入查询实施加密,但解密时代码不可读。然而 - 当我使用更新加密同一条记录时,记录被正确解密
为了测试,我使用了以下代码来确定发生了什么
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。