sql server中怎么给数据库表中的用户密码加密

sql server中怎么给数据库表中的用户密码加密,第1张

在SQl2005下自带的函数hashbytes()

,此函数是微软在SQL

SERVER

2005中提供的,可以用来计算一个字符串

MD5

SHA1

值,使用方法如下:

--获取123456的MD5加密串

select

hashbytes('MD5',

'123456')

--获取123456的SHA1加密串

select

hashbytes('SHA1',

'123456')

有了这个函数可以在sqlserver中为字符串进行加密,但是hashbytes()

函数的返回结果是

varbinary类型,(以

0x

开头

16

进制形式的二进制数据)通常情况下,我们需要的都是字符串型的数据,很多人首先想到的可能就是用

CAST

Convert

函数将varbinary

转换为

varchar,但这样转换后的结果会是乱码,正确转换

varbinary

可变长度二进制型数据到

16

进制字符串应该使用系统内置函数

sys.fn_varbintohexstr()(只在sqlserver2005下有),如下所示:select

sys.fn_varbintohexstr(hashbytes('MD5',

'123456'))

然后就可以截取需要的部分select

lower(right(sys.fn_varbintohexstr(hashbytes('MD5','123456')),32))为md5加密串。

#region DES加密字符串

/// <summary>

/// 加密字符串

/// 注意:密钥必须为8位

/// </summary>

/// <param name="strText">字符串</param>

public string DesEncrypt(string strText)

{

byte[] byKey = null

byte[] IV = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF }

try

{

string encryptKey = "XX_XX_XX" //密钥

byKey = System.Text.Encoding.UTF8.GetBytes(encryptKey)

DESCryptoServiceProvider des = new DESCryptoServiceProvider()

byte[] inputByteArray = Encoding.UTF8.GetBytes(strText)

MemoryStream ms = new MemoryStream()

CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(byKey, IV), CryptoStreamMode.Write)

cs.Write(inputByteArray, 0, inputByteArray.Length)

cs.FlushFinalBlock()

return Convert.ToBase64String(ms.ToArray())

}

catch

{

}

return strText

}

#endregion

#region DES解密字符串

/// <summary>

/// 解密字符串

/// </summary>

/// <param name="inputString">加了密的字符串</param>

public string DesDecrypt(string inputString)

{

byte[] byKey = null

byte[] IV = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF }

byte[] inputByteArray = new Byte[inputString.Length]

try

{

string decryptKey = "XX_XX_XX"

byKey = System.Text.Encoding.UTF8.GetBytes(decryptKey.Substring(0, 8))

DESCryptoServiceProvider des = new DESCryptoServiceProvider()

inputByteArray = Convert.FromBase64String(inputString)

MemoryStream ms = new MemoryStream()

CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(byKey, IV), CryptoStreamMode.Write)

cs.Write(inputByteArray, 0, inputByteArray.Length)

cs.FlushFinalBlock()

System.Text.Encoding encoding = new System.Text.UTF8Encoding()

return encoding.GetString(ms.ToArray())

}

catch

{

}

return inputString

}

#endregion

===这个是DES方式加密解密字符串的

System.Security.Cryptography.MD5CryptoServiceProvider md5=new System.Security.Cryptography.MD5CryptoServiceProvider()

return Convert.ToBase64String(md5.ComputeHash(System.Text.Encoding.Unicode.GetBytes(yourstring)))

===这个是MD5的

实现代码也给你写好了,希望能对你有帮助

当数据被存储时候被加密,它们被使用的时候就会自动加密。在其他的情况下,你可以选择数据是否要被加密。SQL Server数据库可以加密下列这些组件:密码存储过程,视图,触发器,用户自定义函数,默认值,和规则。

在服务器和用户之间传输的数据密码加密SQL Server自动将你分配给登陆和应用角色的密码加密。尽管当你可以从主数据库中直接察看系统表格而不需要密码。你不能给对这种情况作出任何修改,事实上,你根本不能破坏它。

定义加密在有些时候,如果对对象进行加密是防止将一些信息分享给他人。例如,一个存储进程可能包含所有者的商业信息,但是这个信息不能和让其他的人看到,即使他们公开的系统表格并可以看到对象的定义。这就是为什么SQL Server数据库允许你在创建一个对象的时候进行加密。为了加密一个存储进程,使用下面形式的CREAT PROCEDURE 语句:

CREATEPROCEDUREprocedurename[number]

[@parameterdatatype

[VARYING][=defaultvalue][OUTPUT]]

[,]

[WITHRECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION]

我们关心的仅仅是可选的WITH参数。你可以详细说明ARECOMPILE或者ENCRYPTION,或者你可以同时说明它们。ENCRYPTION关键字保护SQL Server数据库它不被公开在进程中。结果,如果ENCRYPTION在激活的时候系统存储进程sp_helptext就会被忽视,这个存储进程将被存储在用户创建进程的文本中。

如果你不想要加密,你可以使用ALTER PROCEDURE,忽略WITH ENCRYPTION子句来重新创建一个进程。

为了能够使用加密。用户和服务器都应该使用TCP/IP NetworkLibraries用来连接。运行适当的Network Utility和检查Force protocol encryption,看下表,用户和服务器之间的连接将不会被加密。

加密也不能完全自由。当连接确定后源码天空

,要继续其他的构造,并且用户和服务器必须运行代码来解释加密和解释的包裹。这里将需要一些开销并且当在编译码的时候会使进程慢下来。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/6663225.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-03-26
下一篇2023-03-26

发表评论

登录后才能评论

评论列表(0条)

    保存