MSSQL Sql加密函数 hashbytes 用法简介

转自:http://www.maomao365.com/?p=4732

这些问题可能导致数据值的改变。一般而言,上述问题可能在你使用非二进制串数据类型(如char,varchar,text等数据类型)的情况下发生。

这周没有什么太专题的东西,就流水账记一下。最近开始入手转型Asp.net
MVC,虽然已经落后时代几条街,但是还是赶赶追追。有一些太细的点记在我的笔记里,就不记到这里了,每次发博客园都是第二遍编写,希望能增加记忆。

一、mssql sql hashbytes
函数简介

  • AES_ENCRYPT()和AES_DECRYPT()

2019.02.19
以前都是在C#程序中直接生成MD5,这一次由于逻辑需要,要在SQL
直接生成MD5,学习了一个语句:
select
substring(sys.fn_sqlvarbasetostr(HashBytes(‘MD5′,’123456’)),3,32)
然后进行了发散得到以下知识:
1、–HashBytes (‘加密方式’,
‘待加密的值’)–(有个疑问,为什么他的返回类型是二进制,最终select出来的确实0x开头的16进制???)
–加密方式= MD2 | MD4 | MD5 | SHA | SHA1
–返回值类型:varbinary(maximum 8000 bytes)
select HashBytes(‘MD5′,’123456’)
–HashBytes生成的结果为:0xE10ADC3949BA59ABBE56E057F20F883E

hashbytes函数功能为:返回一个字符,
通过 MD2、MD4、MD5、SHA、SHA1、SHA2_256、SHA2_512方式加密后的返回值

AES_ENCRYPT()和AES_DECRYPT()可以加密/解密使用官方AES算法的数据。该算法使用128位密钥来编码,但用户可以将其扩展到256位。MySQL选用128位密钥,因为这样算法实现更快,而且对大多数用户而言它也足够安全了。

其中,’待加密的值’要非常小心,赋的值相同,如果类型不同,得到的md5相差甚远。例如:varchar,nvarchar,因为他们的实际存储大小不一样。

hashbytes(‘参数1’,’参数2’)

AES_ENCRYPT(str,key_str)函数加密一个字符串并返回一个二进制串。AES_DECRYPT(crypt_str,
key_str) 函数可以解密使用官方AES(Advanced Encryption
Standard)算法加密的数据并返回原有字符串,输入变量可以是任意长度。如果输入变量为NULL,那么该函数返回结果也为NULL。

2、sys.fn_sqlvarbasetostr用于把字节流类型varbinary,转化成字符流varchar
3、substring(‘原始字符串’,’开始位置’,’截取长度’)字符串截取。有一点需要注意的是,sql跟C#程序不同的是,开始位置是从1开始的,不是0,别算错了

参数1:
输入加密类型 例:MD5
参数2:
输入待加密的字符串(加密字符串最大值为 8000字节)
返回值:
返回值最大为8000字节
注意事项:
当输入加密类型,异常时,返回NULL

因为AES是一个块级算法,需要使用补白来编码非偶数长度的字符串。

2019.02.20
通过MVC的一个[ValidateAntiForgeryToken]特性学习到了“跨网站请求伪造”(CSRF(Cross-site
request
forgery))这个概念,意思就是第三方站点利用漏洞站点对浏览器cookie的信任,发送虚假请求,从而做出一些未经用户许可的操作,前提是用户未退出信任站点的会话,并且信任站点在本地产生了cookie。之前确实没怎么注意这个细节,只是现在开发的WebAPI项目中根本没有用到cookie,连session也没用,所以应该是安全的。

二、mssql sql hashbytes
举例应用

  • ENCODE()和DECODE()

2019.02.21
集合类型的几种选择思路:
1.如果你返回的集合是只用于遍历,不可修改的,则返回IEnumerable<T>
2.如果返回的集合需要修改,如添加和删除元素,用ICollection<T>
3.如果返回的集合需要支持排序,索引等,用IList<T>
4.如果返回的集合要支持索引,但不能添加,删除元素,用ReadOnlyCollection<T>

例1:

ENCODE(str,
pass_str):该函数使用pass_str作为密码来加密字符串str,其加密的结果可以通过DECODE()函数来解密。该函数返回的结果是一个同str等长。
DECODE(crypt_str,
pass_str):该函数使用pass_str作为密码来解密使用ENCODE()加密后的字符串crypt_str。

2019.02.22
1、泛型:Func<T, bool>,Expression<Func<T,
bool>>用法
Func<T,
bool>:.net系统自定义了两种委托,有返回值的Func,无返回值的Action。而Func的最后一个参数总是委托的返回类型。
Expression<Func<T,
bool>>:是一种表达式,EF中where要求的类型
例如:

   DECLARE @info nvarchar(4000);  
SET @info = CONVERT(nvarchar(4000),'www.maomao365.com');  
SELECT HASHBYTES('SHA1', @info);   ---返回采用SHA1加密
SELECT HASHBYTES('MD5', @info);    ---返回采用MD5加密
SELECT HASHBYTES('MD2', @info);    ---返回采用MD2加密
  • DES_ENCRYPT()和DES_ENCRYPT()
//正确的代码Expression<Func<QuestionFeed, bool>> predicate=null;if (type == 1){  predicate = f => f.FeedID == id && f.IsActive == true;}else{  predicate = f => f.FeedID == id;}_questionFeedRepository.Entities.Where(predicate);

例2:

DES_ENCRYPT(str[,
{key_num|key_str}]):该函数使用三重DES算法连同给定的密钥来加密加密字符串。
DES_DECRYPT(crypt_str[,
key_str]):该函数解密一个通过DES_ENCRYPT()加密的字符串,如果出现错误,该函数返回NULL。

 

  • COMPRESS()和UNCOMPRESS()
You can leave a response, or trackback from your own site.

Leave a Reply

网站地图xml地图