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 = ; 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#字符串到字符的转化的更多相关文章
- MSSQL 调用 .net 代码
http://www.cnblogs.com/laozhao8/p/3398681.html 在SQL Server中调用.NET程序集 需求是这样的,我在.net程序里操作数据时将一些字段数据加 ...
- c# 调用 C++ dll 传入传出 字符串
c# 调用 C++ dll 传入传出 字符串 2013-07-02 09:30 7898人阅读 评论(2) 收藏 举报 本文章已收录于: 分类: windows 版权声明:随便转载,随便使用. C ...
- The Swift Programming Language-官方教程精译Swift(4)字符串和字符
String 是一个有序的字符集合,例如 "hello, world", "albatross".Swift 字符串通过 String 类型来表示,也可以表示为 ...
- Swift语言指南(十)--字符串与字符
原文:Swift语言指南(十)--字符串与字符 字符串是一段字符的有序集合,如"hellow,world"或"信天翁".Swift 中的字符串由 String ...
- Swift 学习- 04 -- 字符串和字符
// 字符串 和 字符 // 字符串 是有序的 Character (字符) 类型的值的集合, 通过 String 类型的集合 // swift 的 String 和 Character 类型提供了 ...
- [精校版]The Swift Programming Language--语言指南--字符串和字符 (转)
今天装了10.10.马上就可以实际编写swift了.还是很兴奋啊. 哈哈.字符串和字符是大家最容易打交道的.今天就转一下讲解swift中字符串和字符的文章.希望对大家有帮助. 原文地址:http:// ...
- 5.Swift教程翻译系列——Swift字符串和字符
英文版PDF下载地址http://download.csdn.net/detail/tsingheng/7480427 字符串是一组字符的有序序列,比方"hello,china"或 ...
- UTF-8编码的字符串拆分成单字、获取UTF-8字符串的字符个数的代码及原理
一.字符编码简介 1. ASCII码 在计算机内部,所有的信息最终都表示为一个二进制的字符串.每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(by ...
- Python中的字符串与字符编码
本节内容: 前言 相关概念 Python中的默认编码 Python2与Python3中对字符串的支持 字符编码转换 一.前言 Python中的字符编码是个老生常谈的话题,同行们都写过很多这方面的文章. ...
随机推荐
- 关于input type=file上传图片的总结
最近比较忙,现在来整理一下近期的成果,方便以后再次使用. 关于图片上传的js 和jq jq $("input").change(function () { var $file = ...
- Zk 集群概念
https://blog.csdn.net/gs80140/article/details/51496925
- 3、Qt Project之Socket网络编程
Socket网络编程 Step1:首先完成整个界面的设计 <?xml version="1.0" encoding="UTF-8"?> <u ...
- multiprocssing,threading,多进程多线程初识
1. multiprocessing 多进程: import multiprocessing p = multiprocessing.Process(target = func,name = &quo ...
- 【Spring Boot】使用JDBC 获取相关的数据
使用JDBC 获取相关的数据 什么是JDBC Java Database Connectivity 是一种用于执行SQL语句的Java API,与数据库建立连接.发送 操作数据库的语句并处理结果. S ...
- linux学习笔记 yum 在线管理软件包
-y 如果yum在工作过程中需要使用者响应.这个参数可以直接回答yes #yum list 列出资源库中所有可安装或者可更新的rpm包 #yum perl 列出为perl的包 #yum perl* ...
- 练习七 Procedure中使用DDL
1 在存储过程中使用ddl语句有如下异常: create or replace procedure test_create_table (Table_Name in VARCHAR2, column_ ...
- SpringBoot+Mybatis+MySql学习
介绍一下SpringBoot整合mybatis,数据库选用的是mysql. 首先创建数据库 CREATE DATABASE test; 建表以及插入初始数据(sql是从navicat中导出的) SET ...
- iOS12系统应用开发发送邮件
iOS12系统应用开发发送邮件 消息分享是应用社交化和营销的重要途径.除了开发者自己搭建专有的消息分享渠道之外,还可以借助系统自带的各种途径.iOS提供了3种快速分享消息的方式,分别为发送邮件.发送短 ...
- [NOIP2018]普及组初赛题解
老师布置的作业,借博客这个平台一用 [总体感觉]对我而言比去年的难度大……特别是最后一题. 选择题 1.D 打印机属于输出设备 2.D 将全部进制转换为10进制进行对比,我的方法是每一位乘以进制的位数 ...