如何使用对称密钥加密和解密SQL Server中的整型数据类型列

如何使用对称密钥加密和解密SQL Server中的整型数据类型列,sql,sql-server,Sql,Sql Server,我可以使用对称密钥加密和解密varchar、nvarchar、char列,但不能对int、datetime、float、bigint数据类型列执行相同的操作 示例表:Mytable | Id Code percentage name activity | +------------------------------------------+ | 1 ad 43.43 James Running | | 3 Pr 70.43

我可以使用对称密钥加密和解密varchar、nvarchar、char列,但不能对int、datetime、float、bigint数据类型列执行相同的操作

示例表:Mytable

| Id  Code  percentage  name    activity   |  
+------------------------------------------+
| 1   ad     43.43    James    Running     |  
| 3   Pr     70.43    Sam      Cooking     |  
| 5   nt     90.34    Lisa     Walking     |  
| 4   ash    0.00     James    Stealing    |  
| 2   han    0.00     James    Lacking     |  
| 8   ant    73       Sam      Cooking     |
我想分别加密和解密整数和浮点数据类型的ID列和百分比

我正在使用此代码加密:

OPEN SYMMETRIC KEY SymKey DECRYPTION BY CERTIFICATE data  

ALTER TABLE Mytable 
SET ADD idencry VARBINARY(128) NULL  


UPDATE Mytable 
SET idencry = ENCRYPTBYKEY(KEY_GUID('datamSymKey'), CONVERT(varbinary, ID))
要解密,我使用以下代码:

SELECT 
    id,
    CONVERT(NVARCHAR(60), DECRYPTBYKEY(idencry )), * 
FROM 
    Mytable

但它没有返回正确的结果。。。float和datetime日期类型也是如此,我已经在SQL Server 2016上测试了这些代码,它的工作如下:

CREATE CERTIFICATE Test04   
   ENCRYPTION BY PASSWORD = 'pGFD4bb925DGvbd2439587y'  
   WITH SUBJECT = 'Sammamish Shipping Records',   
   EXPIRY_DATE = '20201031';  
GO  

CREATE SYMMETRIC KEY #SymKey   
WITH ALGORITHM = AES_128 
ENCRYPTION BY CERTIFICATE Test04;  
GO  

create Table #TestData
(
    Id int,
    Code varchar(10)
)

Insert into #TestData
(
    Id,
    Code
)
SELECT 1,'AA'
UNION 
SELECT 2,'BB'
UNION 
SELECT 3,'CC'
UNION 
SELECT 4,'DD'
UNION 
SELECT 5,'EE'
UNION 
SELECT 6,'FF'

SELECT * FROM #TestData

OPEN SYMMETRIC KEY #SymKey DECRYPTION BY CERTIFICATE Test04 WITH PASSWORD='pGFD4bb925DGvbd2439587y'

ALTER TABLE #TestData 
 ADD idencry VARBINARY(128) NULL  


UPDATE #TestData 
SET idencry = ENCRYPTBYKEY(KEY_GUID('#SymKey'), CONVERT(varbinary, Id))



SELECT * FROM #TestData


OPEN SYMMETRIC KEY #SymKey DECRYPTION BY CERTIFICATE Test04 WITH PASSWORD='pGFD4bb925DGvbd2439587y'

SELECT 
    Id,
    CONVERT(int, DECRYPTBYKEY(idencry)) AS 'IdDecrypted', * 
FROM 
    #TestData


DROP TABLE  #TestData 

DROP SYMMETRIC KEY #SymKey   

DROP CERTIFICATE Test04
我认为在使用decryptbykey时必须强制转换为源类型

 CONVERT(NVARCHAR(60), DECRYPTBYKEY(idencry )), * 
您的“Id”列类型是什么

你能试试吗

CONVERT(INT, DECRYPTBYKEY(idencry )), * 

请随意添加相关代码,这样用户将了解您正在做什么,以及当前代码中存在的问题!看到这篇文章可能会帮助你,这篇文章也可以解释和展示例子:@adams你找到解决方案了吗?