加密SQL Server中列中的数据

加密SQL Server中列中的数据

问题描述:

sql server中是否存在加密数据的算法。我有一个密码字段,我需要加密,但我必须加密数据,一旦它传递到存储过程中。这意味着我无法从我的C#代码传递加密数据。加密SQL Server中列中的数据

CREATE PROC saveData(@p1 VARCHAR(50), 
       @p2 VARCHAR(50)) 
AS 
BEGIN 
    DECLARE @encryptedP1 VARCHAR(50) 

    SET @encryptedP1=dbo.fnEncrypt(@p1) --ENCRYPTING THE DATA WITH AN INBUILT FUNCTION 

    INSERT INTO table1 
       (column1, 
       column2) 
    VALUES  (@encryptedP1, 
       @p2) 
END 
+0

加密是不明确的。你想使用什么加密算法?私钥和公钥将存储在哪里?它需要加密还是密码哈希? – crush 2013-02-26 16:08:02

+0

建议我哪个是最好的安全目的 – 2013-02-26 16:12:46

+0

这取决于你需要做什么与数据。如果你需要恢复密码,而不是简单地重新设置密码,那么哈希就不存在了。 – crush 2013-02-26 16:15:33

虽然散列在技术上没有加密,我建议盐腌SHA1或MD5

CONVERT(VARCHAR(32), HashBytes('MD5', '[email protected]'), 2) 

+0

我已经提到过,我不允许在c#中加密/解密。# – 2013-02-26 16:12:27

+0

这是一个散列,而不是加密。另外,您可以在SQL中执行SHA1和MD5。 – crush 2013-02-26 16:14:37

+0

请参阅我的编辑。 – idipous 2013-02-26 16:14:59

像往常一样,好老Pinal Dave有一些useful information on this。这有点涉及,但如果你必须在SQL Server中做,而不是在客户端代码,那么它应该为你做这项工作。您可能需要留意性能问题,因为它是一个CPU密集型的过程。

+2

今年低估。在数据库服务器上进行这种处理通常不是一个好主意。 (注释不是批评) – crush 2013-02-26 16:17:05

+6

Downvoter - 关注评论?最初的问题是关于SQL Server中的加密问题,这是他得到的。似乎有点意味着只是因为你不认同它的好主意而下决心。哎呀,我甚至指出... – Simon 2014-02-08 17:30:07

+0

@Simon:搜索引导我在这里,你可能想要添加链接相关信息 – TheGameiswar 2016-09-24 17:45:19

这是一个非常快速的例子。它适用于非对称密钥。我希望这可以帮助。

第一关:使用此代码创建非对称密钥:


USE [yourDB] 

GO 

CREATE ASYMMETRIC KEY ClaveAsym 

WITH ALGORITHM = RSA_2048 ---->Take a look in this type of algorithms 

ENCRYPTION BY PASSWORD = 'yourKey' 

GO 

记住这一点,你必须总是要解密加密声明变量

DECLARE @KEYID INT 
SET @KEYID = AsymKey_ID('ClaveAsym') 

解密数据

SELECT columnA, CAST(DecryptByAsymKey(@keyid, columnUser, N'yourKey') AS VARCHAR(100)), 
     CONVERT(VARCHAR(MAX), DECRYPTBYASYMKEY(@keyId, columnPass, N'yourKey')) 
FROM yourTable 

加密数据

DECLARE @User VARCHAR(MAX), @pass VARCHAR(MAX) 

SET @User = 'yourUser' 

sET @pass = 'yourPass' 

DECLARE @KEYID INT SET @KEYID = AsymKey_ID('ClaveAsym') 

INSERT INTO yourTable(User, passw) VALUES EncryptByAsymKey (@keyid, @User), EncryptByAsymKey (@keyid, @pass))