我在插入查询中实现加密,但是在解密时代码是不可读的。但是 - 当我使用更新加密相同的记录时,记录正确解密
进行测试,我使用以下代码来确定正在进行的操作
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
答案 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 。