
,此函数是微软在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,看下表,用户和服务器之间的连接将不会被加密。
加密也不能完全自由。当连接确定后源码天空
,要继续其他的构造,并且用户和服务器必须运行代码来解释加密和解释的包裹。这里将需要一些开销并且当在编译码的时候会使进程慢下来。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)