原由:廠商丟了編成 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 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