SQL MD5 加密 & C# BASE64

C# BASE64

原由:厂商丢了编成 Base64 字串的东西来,接到後,要把它还原.

string a = "abc您好123";
byte[] bytes = System.Text.Encoding.GetEncoding("utf-8").GetBytes(a);

//编成 Base64 字串
string b = Convert.ToBase64String(bytes);

//从 Base64 字串还原
string c = System.Text.Encoding.GetEncoding("utf-8").GetString(Convert.FromBase64String(b));

ref
https://dotblogs.com.tw/alvin26/2013/10/18/124693

SQL MD5

SQL SEVER有提供加密,加密方式有MD2、MD4、MD5、SHA、SHA1 或 SHA2 杂凑
这里我们用到的是MD5
function HashBytes('MD5',xxx)
e.g.
declare @id varchar(max) ='123456'
HashBytes('MD5',@id)

想说这样就结束了吗?
没有,有几个地方要注意
1.我们一般用的都是varchar,但它转成varbinary了,所以要再转换一下.
2.我们一般不会保留0x,所以在转换时,要注意要不要保留Pre


1.varbinary转成varchar
转换方式有3种
sys.fn_sqlvarbasetostr(@HashBytes)
CONVERT(VARCHAR(50),@HashBytes,1)--Sql Server2008及以上
sys.fn_varbintohexsubstring(1,@HashBytes,1,0)

2.保留Pre与不保留Pre的设定
2.1.sys.fn_sqlvarbasetostr(@HashBytes)

它预设就是会留,所以不要的话,要从第3个开始拿
substring(sys.fn_sqlvarbasetostr(@HashBytes),3,32)

2.2.CONVERT(VARCHAR(50),@HashBytes,@var)
@var 1:保留 2:不保留
e.g.CONVERT(VARCHAR(50),@HashBytes,1)
e.g.CONVERT(VARCHAR(50),@HashBytes,2)

2.3.sys.fn_varbintohexsubstring(@var,@HashBytes,1,0)
@var 1:保留 0:不保留
e.g.sys.fn_varbintohexsubstring(1,@HashBytes,1,0)
e.g.sys.fn_varbintohexsubstring(0,@HashBytes,1,0)

-------------------------------看一看
declare @id varchar(max) ='123456'

select 'w21-保留0x前缀',CONVERT(VARCHAR(50),HashBytes('MD5',@id),1)
union all select 'w22-不保留0x前缀',lower(CONVERT(VARCHAR(50),HashBytes('MD5',@id),2))
--Convert()函数是Sql Server2008及以上版本支持,2008以下版本可以使用下面的方法:
union all select 'w3-cc', substring(sys.fn_sqlvarbasetostr(HashBytes('MD5',@id)),3,32)
--第1个参数表示是否保留0x前缀,1为保留,0为不保留
union all select N'w41-保留0x前缀', sys.fn_varbintohexsubstring(1,HashBytes('MD5',@id),1,0)
union all select N'w40-不保留0x前缀', sys.fn_varbintohexsubstring(0,HashBytes('MD5',@id),1,0)

ref
https://www.cnblogs.com/JuneZhang/p/6396896.html


<<:  常见漏洞披露(CVE)及常见弱点枚举(CWE)

>>:  JS ES6 箭头函式 DAY73

Day 25 : Linux - 如何在windows使用scp去传送档案至Linux上?

如标题,这篇想和大家介绍scp的用法,它可以让你「远端传送档案」到另一台电脑里 这边我们在「本机端」...

30天轻松学会unity自制游戏-前言

当你点进来的目的可能有以下几种 无聊随便逛逛… 想尝试做一款游戏 已经会做游戏继续学习其他技巧 其他...

docker network bridge error

This pages will show you how to solve the docker n...

DAY 27『 使用相机拍照 』 ImagePicker - Part1

今天分享 ImagePicker 如何使用相机拍照 拉一个 Button 、 ImageView 在...

Flutter基础介绍与实作-Day23 旅游笔记的实作(4)

今天就接续来讲中部地区的制作吧! 资料夹建立 lib/scareens/food_Middle/fo...