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 = ; 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 = ; i < arr.Length; i++)
{
char c = arr[i];
str = str + ((char)(c - keyLen));
}
return str;
}
}

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

exec sp_configure 'show advanced options', '';
go
reconfigure;
go
exec sp_configure 'clr enabled', ''
go
reconfigure;
exec sp_configure 'show advanced options', '';
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 from sysobjects where name='dbo.DataEncrypt' and xtype='FN')
begin
drop function dbo.DataEncrypt
end go CREATE FUNCTION dbo.DataEncrypt
(
@target as nvarchar (),
@keyLen as int
)
RETURNS nvarchar ()
AS EXTERNAL NAME CLRFunctions.CLRFunctions.DataEncrypt go
if exists(select from sysobjects where name='dbo.DataDecrypt' and xtype='FN')
begin
drop function dbo.DataDecrypt
end go CREATE FUNCTION dbo.DataDecrypt
(
@target as nvarchar (),
@keyLen as int
)
RETURNS nvarchar ()
AS EXTERNAL NAME CLRFunctions.CLRFunctions.DataDecrypt

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

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

MSSQL 调用C#程序集 实现C#字符串到字符的转化的更多相关文章

  1. MSSQL 调用 .net 代码

    http://www.cnblogs.com/laozhao8/p/3398681.html 在SQL Server中调用.NET程序集   需求是这样的,我在.net程序里操作数据时将一些字段数据加 ...

  2. c# 调用 C++ dll 传入传出 字符串

    c# 调用 C++ dll 传入传出 字符串 2013-07-02 09:30 7898人阅读 评论(2) 收藏 举报 本文章已收录于:   分类: windows 版权声明:随便转载,随便使用. C ...

  3. The Swift Programming Language-官方教程精译Swift(4)字符串和字符

    String 是一个有序的字符集合,例如 "hello, world", "albatross".Swift 字符串通过 String 类型来表示,也可以表示为 ...

  4. Swift语言指南(十)--字符串与字符

    原文:Swift语言指南(十)--字符串与字符 字符串是一段字符的有序集合,如"hellow,world"或"信天翁".Swift 中的字符串由 String ...

  5. Swift 学习- 04 -- 字符串和字符

    // 字符串 和 字符 // 字符串 是有序的 Character (字符) 类型的值的集合,  通过 String 类型的集合 // swift 的 String 和 Character 类型提供了 ...

  6. [精校版]The Swift Programming Language--语言指南--字符串和字符 (转)

    今天装了10.10.马上就可以实际编写swift了.还是很兴奋啊. 哈哈.字符串和字符是大家最容易打交道的.今天就转一下讲解swift中字符串和字符的文章.希望对大家有帮助. 原文地址:http:// ...

  7. 5.Swift教程翻译系列——Swift字符串和字符

    英文版PDF下载地址http://download.csdn.net/detail/tsingheng/7480427 字符串是一组字符的有序序列,比方"hello,china"或 ...

  8. UTF-8编码的字符串拆分成单字、获取UTF-8字符串的字符个数的代码及原理

    一.字符编码简介 1. ASCII码 在计算机内部,所有的信息最终都表示为一个二进制的字符串.每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(by ...

  9. Python中的字符串与字符编码

    本节内容: 前言 相关概念 Python中的默认编码 Python2与Python3中对字符串的支持 字符编码转换 一.前言 Python中的字符编码是个老生常谈的话题,同行们都写过很多这方面的文章. ...

随机推荐

  1. mysql-数据库管理安装

    第一节 数据库管理系统 相关网址:www.db-engines.com mysql站点:www.mysql.com mariadb.org   mariadb官方站点 数据库分类: 关系型数据库: o ...

  2. BZOJ4036 [HAOI2015]按位或 FWT

    原文链接https://www.cnblogs.com/zhouzhendong/p/BZOJ4036.html 题目传送门 - BZOJ4036 题意 刚开始你有一个数字 $0$ ,每一秒钟你会随机 ...

  3. CodeSignal 刷题 —— almostIncreasingSequence

    Given a sequence of integers as an array, determine whether it is possible to obtain a strictly incr ...

  4. SEED-DVS6467_SDK的交叉编译环境搭建问题

    今天在ubuntu16.04上安装arm的交叉编译器arm_v5t_le-gcc,环境变量配置好以后,运行arm_v5t_le-gcc命令,总提示No such file or directory.然 ...

  5. Python 主、次(major,minor)版本号获取

    Python  主.次(major,minor)版本号获取 import sys sys.version_info sys.version_info.major sys.version_info.mi ...

  6. 左连接不能与or否则in连用

    select  z.sjssny,z.XXSE,z.JXSE,z.nsrsbh, nsr.zgswskfj_dm,nsr.nsrmc,nsr.zgswj_dm,nsr.SSGLY_DM,nsr.nsr ...

  7. JavaEE 之 DBCP

    1.DBCP a.定义:DBCP(DataBase Connection Pool)数据库连接池,是java数据库连接池的一种,由Apache开发,通过数据库连接池,可以让程序自动管理数据库连接的释放 ...

  8. vsftpd中配置文件详解

    在vsftp服务器中,配置文件/etc/vsftpd/vsftpd.conf文件是配置的核心内容,其具体的配置信息详细情况如下: 1.默认配置: 1>允许匿名用户和本地用户登陆. anonymo ...

  9. c++简单学习

    在c++中我们很容易遇到字符串的分割处理问题,这种问题通常比较容易,但由于我比较菜,花费了一定时间去思考一个和字符串相关的题,该题的大概思路是利用取模运算后,将得到的单个字符进行分析,主要考察到了字符 ...

  10. codeforces723----C. Polycarp at the Radio

    //AC代码...表示很晕 #include <iostream> using namespace std; ],b[]; int main() { int n,m,cnt; cin &g ...