在公司中一同事用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 "";

}

}

}

};

利用sqlclr实现数据库服务器端数据加密解密的更多相关文章

  1. 利用SQl对数据库实行数据拆分与组合

    利用SQl对数据库实行数据拆分与组合实现提供以下几种方案: 方法一: WITH CTE AS (SELECT A.Id,A.[Uid],UserName FROM (SELECT A.[id], RE ...

  2. (喷血分享)利用.NET生成数据库表的创建脚本,类似SqlServer编写表的CREATE语句

    (喷血分享)利用.NET生成数据库表的创建脚本,类似SqlServer编写表的CREATE语句 在我们RDIFramework.NET代码生成器中,有这样一个应用,就是通过数据库表自动生成表的CREA ...

  3. 利用powerdesigner反向数据库结构,生成ER图

    参考月下狼~图腾~:<利用powerdesigner反向数据库结构,生成ER图> https://www.zybuluo.com/Jpz/note/123582 首先新建一个"P ...

  4. 利用.NET生成数据库表的创建脚本,类似SqlServer编写表的CREATE语句

    利用.NET生成数据库表的创建脚本,类似SqlServer编写表的CREATE语句 (喷血分享)利用.NET生成数据库表的创建脚本,类似SqlServer编写表的CREATE语句 在我们RDIFram ...

  5. 【DG】利用闪回数据库(flashback)修复Failover后的DG环境

    利用闪回数据库(flashback)修复Failover后的DG环境 1.1  BLOG文档结构图 1.2  前言部分 1.2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能, ...

  6. JMeter 利用Jmeter批量数据库插入数据

    利用Jmeter批量数据库插入数据   by:授客 QQ:1033553122 1.   启动Jmeter 2.   添加 DBC Connection Configuration 右键线程组-> ...

  7. SQL中利用脚本恢复数据库

    SQL中利用脚本恢复数据库   编写人:CC阿爸 2014-6-15 在日常SQL数据库的操作中,如何恢复数据库 use master drop database SCS1 RESTORE DATAB ...

  8. 利用PowerDesigner设计数据库

    PowerDesigner非常强大, 可以利用它完成数据库的设计. 1.下载地址:http://pan.baidu.com/s/1DsLrg 2.表设计: 建立概念数据模型(Conceptual Da ...

  9. C#备份及还原数据库的实现代码(粗略) // 利用C#还原数据库(SQL SERVER)备份文件到指定路径

    C#数据库备份及还原 1.在用户的配置时,我们需要列出当前局域网内所有的数据库服务器,并且要列出指定服务器的所有数据库,实现代码如下: 取得数据库服务器列表: public ArrayList Get ...

随机推荐

  1. testbench中将外部数据引入输出的方法(转载)

    在进行HDL的仿真测试时,除了用较为直观的波形仿真图像以外,通过编写测试文件testbench进行仿真并将仿真结果保存在对应的文件,显得尤为重要.文件的操作主要用到读和写两种操作. 1. 读操作 读操 ...

  2. C#中假设正确使用线程Task类和Thread类

    C#中使用线程Task类和Thread类小结 刚接触C#3个月左右.原先一直使用C++开发.由于公司的须要,所地採用C#开发.主要是控制设备的实时性操作,此为背景. 对于C#中的Task和Thread ...

  3. shell 监控局域网的主机是否up(转)

    #!/bin/bash for ((i=30;i<60;i++)) ;do ping -c 3 172.31.0.$i>/dev/null #ping -c 172.31.0.30 ~17 ...

  4. js 正则学习小记之匹配字符串优化篇

    原文:js 正则学习小记之匹配字符串优化篇 昨天在<js 正则学习小记之匹配字符串>谈到 个字符,除了第一个 个,只有 个转义( 个字符),所以 次,只有 次成功.这 次匹配失败,需要回溯 ...

  5. 各大oj题目分类(转)

    POJ题目分类 | POJ题目分类 | HDU题目分类 | ZOJ题目分类 | SOJ题目分类 | HOJ题目分类 | FOJ题目分类 | 模拟题: POJ1006POJ1008POJ1013POJ1 ...

  6. SimpleInjector与MVC4集成,与Web Api集成,以及通过属性注入演示

    SimpleInjector与MVC4集成,与Web Api集成,以及通过属性注入演示   1,与MVC集成 见http://simpleinjector.codeplex.com/wikipage? ...

  7. linux_ubuntu 16.04 更新wifi驱动_无法链接wifi问题

    ubuntu kylin ubuntu kylin ubuntu kylin wifi 这个很好解决的,16.04 默认 没有使用wifi驱动设备,默认选择的是:不使用设备1.进入到,软件和更新 -- ...

  8. Web项目

    Eclipse部署Web项目(图文讲解)   讲解是在linux下完成的,但对windows系统,操作也是一样的,不要被吓到了 1.下载Eclipse

  9. Hadoop上传文件的报错

    baidu了很多,都说防火墙,datanode没有正常启动的问题,可是检查了都是正常,后来还是在老外的网站上找到了解决的方法 修改了/etc/security/limits.conf文件,上传成功 这 ...

  10. MAC 配置--Tomcat服务器

    1. 下载tomcat版本(tar.gz) 到 apache官方主页 下载 Mac 版本的完整 tar.gz文件包.(问公司后台,是Tomcat 6.0/7.0/8.0版本?) 解压拷贝到 /Libr ...