如何使用对称密钥加密和解密 SQL Server 中的整数数据类型列
Posted
技术标签:
【中文标题】如何使用对称密钥加密和解密 SQL Server 中的整数数据类型列【英文标题】:How to encrypt and decrypt integer data type column in SQL Server using symmetric key 【发布时间】:2018-12-31 07:32:59 【问题描述】:我可以使用对称密钥加密和解密 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
但它没有返回正确的结果......浮点和日期时间日期类型也是如此
【问题讨论】:
请随意添加相关代码,这样用户就会知道你在做什么以及当前代码有什么问题!见Example 这篇文章可能对你有帮助c-sharpcorner.com/UploadFile/chinnasrihari/… 这篇文章也可以解释和展示示例:docs.microsoft.com/en-us/sql/relational-databases/security/… 【参考方案1】:您好,我已经在 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 你找到解决方案了吗?以上是关于如何使用对称密钥加密和解密 SQL Server 中的整数数据类型列的主要内容,如果未能解决你的问题,请参考以下文章