博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MSSQL 调用C#程序集 实现C#字符串到字符的转化
阅读量:6653 次
发布时间:2019-06-25

本文共 3022 字,大约阅读时间需要 10 分钟。

10多年前用过MSSQL 调用C#程序集来实现数据的加密和解密,也搞过通过字符偏移实现简单的加密和解密。这次就总结一下吧:

C#如下:

public class CLRFunctions    {        ///         /// 数据加密        ///         ///         /// 
public static String DataEncrypt(string target, int keyLen) { if (string.IsNullOrEmpty(target)) return string.Empty; string str = string.Empty; char[] arr = target.ToCharArray(); for (int i = 0; i < arr.Length; i++) { char c = arr[i]; str = str + ((char)(c + keyLen)); } return str; } /// /// 数据解密 /// /// ///
public static String DataDecrypt(string target, int keyLen) { if (string.IsNullOrEmpty(target)) return string.Empty; string str = string.Empty; char[] arr = target.ToCharArray(); for (int i = 0; i < arr.Length; i++) { char c = arr[i]; str = str + ((char)(c - keyLen)); } return str; } }

SQL如下,这里需要启用程序集功能,然后在创建程序集:

exec sp_configure 'show advanced options', '1';goreconfigure;goexec sp_configure 'clr enabled', '1'goreconfigure;exec sp_configure 'show advanced options', '1';go if exists (select * from sys.assemblies where name='CLRFunctions')  drop assembly CLRFunctions;go CREATE  ASSEMBLY CLRFunctions  FROM  'd:\sql\xxx.dll' ; Go if  exists(select 0 from sysobjects where name='dbo.DataEncrypt' and xtype='FN') begin drop function dbo.DataEncrypt end go  CREATE  FUNCTION  dbo.DataEncrypt    (         @target as nvarchar (200),      @keyLen as int )     RETURNS   nvarchar (200)    AS  EXTERNAL NAME CLRFunctions.CLRFunctions.DataEncrypt     go  if  exists(select 0 from sysobjects where name='dbo.DataDecrypt' and xtype='FN') begin drop function dbo.DataDecrypt end go   CREATE  FUNCTION  dbo.DataDecrypt    (         @target as nvarchar (200),      @keyLen as int )     RETURNS   nvarchar (200)    AS  EXTERNAL NAME CLRFunctions.CLRFunctions.DataDecrypt

后来尝试用SQL实现C#的ToCharArray方法,在实现字符偏移,SQL如下:

if  exists(select 0 from sysobjects where name='DataEncrypt' and xtype='FN') begin drop function dbo.DataEncrypt end goCREATE FUNCTION dbo.DataEncrypt(@target nvarchar (200),@keyLen int)RETURNS nvarchar (200)ASBEGINDECLARE @position int,@ret nvarchar(200);  SET @position = 1;  set @ret=''WHILE @position <= len(@target)     BEGIN      set @ret=@ret+ nchar(unicode(SUBSTRING(@target, @position, 1))+@keylen)    SET @position = @position + 1     END;  RETURN @retEND go  if  exists(select 0 from sysobjects where name='DataDecrypt' and xtype='FN') begin drop function dbo.DataDecrypt end goCREATE FUNCTION dbo.DataDecrypt(@target nvarchar (200),@keyLen int)RETURNS nvarchar (200)ASBEGINDECLARE @position int,@ret nvarchar(200);  SET @position = 1;  set @ret=''WHILE @position <= len(@target)     BEGIN      set @ret=@ret+ nchar(unicode(SUBSTRING(@target, @position, 1))-@keylen)    SET @position = @position + 1     END;  RETURN @retEND

 

转载地址:http://zxjto.baihongyu.com/

你可能感兴趣的文章
学习《SQL Server 2005管理员大全》时遇到的困难
查看>>
CCIE路由实验(8) -- QoS
查看>>
CPU利用率与Load Average的区别?
查看>>
CF600E:Lomsat gelral(线段树合并)
查看>>
Spring中的p标签(转)
查看>>
如何延长WP7软件第一屏splashimage.jpg的显示时间
查看>>
秘诀!支付宝支撑双十一4200万次/秒的数据库请求峰值的技术实现
查看>>
存储过程: 存储过程(stored procedure)有时也称为sproc。存储过程存储于数据库中而不是在单独的文件中,有输入参数、输出参数以及返回值等。...
查看>>
java中方法复写的作用进一步理解
查看>>
50个常用的Linux命令(三)awk
查看>>
mysql异常com.mysql.jdbc.PacketTooBigException
查看>>
selenium无界面chromedriver
查看>>
Hibernate入门案例及增删改查
查看>>
12_敏感信息泄露
查看>>
Ajax:数据验证
查看>>
css绝对定位如何在不同分辨率下的电脑正常显示定位位置?
查看>>
泛型类
查看>>
从零开始学OpenDaylight之四:Maven工具
查看>>
定时器解决js长时间运行脚本问题
查看>>
Ue4的GitHUB版本版本管理探索
查看>>