• MSSQL 调用C#程序集 实现C#字符串到字符的转化


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

    C#如下:

     public class CLRFunctions
        {
            /// <summary>
            /// 数据加密
            /// </summary>
            /// <param name="target"></param>
            /// <returns></returns>
    
            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;
            }
    
            /// <summary>
            /// 数据解密
            /// </summary>
            /// <param name="target"></param>
            /// <returns></returns>
    
            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';
    go
    reconfigure;
    go
    exec sp_configure 'clr enabled', '1'
    go
    reconfigure;
    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:sqlxxx.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
    
     go
    CREATE FUNCTION dbo.DataEncrypt(@target nvarchar (200),@keyLen int)
    RETURNS nvarchar (200)
    AS
    BEGIN
    DECLARE @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 @ret
    END
    
     go
      if  exists(select 0 from sysobjects where name='DataDecrypt' and xtype='FN')
     begin
     drop function dbo.DataDecrypt
     end
    
     go
    
    CREATE FUNCTION dbo.DataDecrypt(@target nvarchar (200),@keyLen int)
    RETURNS nvarchar (200)
    AS
    BEGIN
    DECLARE @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 @ret
    END
  • 相关阅读:
    判断文件结束,feof……
    第五篇 分治思想(例子待加)
    第四篇 枚举思想
    第三篇 贪心思想
    第二篇 递归思想
    第一篇 递推思想
    爬虫系列
    整数划分问题
    html中a标签做容器的问题
    H5学习小结——div+css创建电子商务静态网页
  • 原文地址:https://www.cnblogs.com/majiang/p/9059131.html
Copyright © 2020-2023  润新知