?
在公司中一同事用sqlclr寫數據遷移自動化執行腳本,發現他在執行腳本時對數據進行了加密。
?
個人覺得利用sqlclr對數據進行加密是一個解決數據網絡安全傳輸的不錯的方案。
?
以下是一個小的案例:
-------------------------執行:
declare @a nvarchar(100)
declare @b nvarchar(100)
set @a=dbo.fun('hi 你好')
set @b=dbo.fun1(@a)
print '加密后:'+@a
print '解密后:'+@b
--結果:
加密后:TIIRFZeZjZg=
解密后:hi 你好
-------------------------------------------加密標量函數:
public partial class UserDefinedFunctions
{
??? [Microsoft.SqlServer.Server.SqlFunction]
??? public static SqlString Fun(SqlString sql)
??? {
??????? // 在此處放置代碼
??????? return new SqlString(DesEncryptString(sql.Value, "12345678", "12345678"));
??? }
??? public static string DesEncryptString(string OriginalString, string EncryptKey, string EncryptOffset)
??? {
??????? byte[] btKey = Encoding.Default.GetBytes(EncryptKey);
??????? byte[] btIV = Encoding.Default.GetBytes(EncryptOffset);
??????? DESCryptoServiceProvider des = new DESCryptoServiceProvider();
??????? using (MemoryStream ms = new MemoryStream())
??????? {
??????????? byte[] inData = Encoding.Default.GetBytes(OriginalString);
??????????? try
??????????? {
??????????????? using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(btKey, btIV), CryptoStreamMode.Write))
??????????????? {
??????????????????? cs.Write(inData, 0, inData.Length);
????????????????? ??cs.FlushFinalBlock();
??????????????? }
?
??????????????? return Convert.ToBase64String(ms.ToArray());
??????????? }
??????????? catch
??????????? {
??????????????? return "";
??????????? }
??????? }
??? }
};
-------------------------------------------解密標量函數:
public partial class UserDefinedFunctions
{
??? [Microsoft.SqlServer.Server.SqlFunction]
??? public static SqlString Fun1(SqlString str)
??? {
??????? // 在此處放置代碼
?
??????? return new SqlString(DesDecryptString(str.Value, "12345678", "12345678"));
??? }
??? public static string DesDecryptString(string EncryptedString, string EncryptKey, string EncryptOffset)
??? {
??????? byte[] btKey = Encoding.Default.GetBytes(EncryptKey);
??????? byte[] btIV = Encoding.Default.GetBytes(EncryptOffset);
??????? DESCryptoServiceProvider des = new DESCryptoServiceProvider();
?
??????? using (MemoryStream ms = new MemoryStream())
??????? {
??????????? byte[] inData = Convert.FromBase64String(EncryptedString);
??????????? try
??????????? {
??????????????? using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(btKey, btIV), CryptoStreamMode.Write))
??????????????? {
??????????????????? cs.Write(inData, 0, inData.Length);
??????????????????? cs.FlushFinalBlock();
??????????????? }
?
??????????????? return Encoding.Default.GetString(ms.ToArray());
??????????? }
??????????? catch
??????????? {
??????????????? return "";
??????????? }
??????? }
??? }
};
?
?
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
