日期:2014-05-16  浏览次数:20443 次

SQL SERVER 解密问题,出现NULL是怎么回事啊哭,急急急。
想请教各位大神,解密部分的代码要怎么改才对啊……
小弟先在这里谢过各位了


USE 学生信息
GO 
DECLARE @NAME CHAR(10) = '王丹',@X CHAR(20)
SELECT @X = [key] FROM 学生信息_DA_ING WHERE PATINDEX(@NAME,姓名)>0
IF @X = 0
BEGIN
OPEN SYMMETRIC KEY SymmetricByCert_DES DECRYPTION BY CERTIFICATE CertT
SELECT 学号 = DecryptByKey(学号)FROM 学生信息_DA_ING WHERE PATINDEX(@NAME,姓名)>0
CLOSE SYMMETRIC KEY SymmetricByCert_DES
END


表格信息如下:



运行结果如下:





我加密时的代码是这样的:

USE 学生信息

--利用DES、AES密钥加密数据并插入新建的表 学生信息_DA_ING
--打开之前创建的由证书加密的对称密钥
OPEN SYMMETRIC KEY SymmetricByCert_DES
DECRYPTION BY CERTIFICATE CertT
OPEN SYMMETRIC KEY SymmetricByCert_AES
DECRYPTION BY CERTIFICATE CertT

UPDATE 学生信息_DA_ING
SET 学号 = EncryptByKey(KEY_GUID('SymmetricByCert_DES'),'20100001') WHERE 学号 = '20100001'
UPDATE 学生信息_DA_ING
SET 学号 = EncryptByKey(KEY_GUID('SymmetricByCert_DES'),'20100002') WHERE 学号 = '20100002'
UPDATE 学生信息_DA_ING
SET 学号 = EncryptByKey(KEY_GUID('SymmetricByCert_DES'),'20100003') WHERE 学号 = '20100003'
UPDATE 学生信息_DA_ING
SET 学号 = EncryptByKey(KEY_GUID('SymmetricByCert_DES'),'20100004') WHERE 学号 = '20100004'
UPDATE 学生信息_DA_ING
SET 学号 = EncryptByKey(KEY_GUID('SymmetricByCert_DES'),'20100005') WHERE 学号 = '20100005'
UPDATE 学生信息_DA_ING
SET 学号 = EncryptByKey(KEY_GUID('SymmetricByCert_AES'),'20100006') WHERE 学号 = '20100006'
UPDATE 学生信息_DA_ING
SET 学号 = EncryptByKey(KEY_GUID('SymmetricByCert_AES'),'20100007') WHERE 学号 = '20100007'
UPDATE 学生信息_DA_ING
SET 学号 = EncryptByKey(KEY_GUID('SymmetricByCert_AES'),'20100008') WHERE 学号 = '20100008'
UPDATE 学生信息_DA_ING
SET 学号 = EncryptByKey(KEY_GUID('SymmetricByCert_AES'),'20100009') WHERE 学号 = '20100009'
UPDATE 学生信息_DA_ING
SET 学号 = EncryptByKey(KEY_GUID('SymmetricByCert_AES'),'20100010') WHERE 学号 = '20100010'

CLOSE SYMMETRIC KEY SymmetricByCert_DES
CLOSE SYMMETRIC KEY SymmetricByCert_AES

------解决方案--------------------
一个学号就是乱码了,还是用二进制保存合适
------解决方案--------------------
你OPEN 密匙了吗?