CLR函数 SQL直接调用 C# DLL MSSQL DES 加解密
2012-06-19 19:40
393 查看
(原 :http://topic.csdn.net/u/20100929/17/21bfc421-4ace-435f-baea-4d352d1015e3.html)
因业务升级,将原用户DES密文转换为MD5,需要在SQL中进行DES解密操作,故使用CLR函数实现,特此记录,以备后用。--by RYHAN
C#程序集 dll 文件
SQL CLR 函数
因业务升级,将原用户DES密文转换为MD5,需要在SQL中进行DES解密操作,故使用CLR函数实现,特此记录,以备后用。--by RYHAN
因业务升级,将原用户DES密文转换为MD5,需要在SQL中进行DES解密操作,故使用CLR函数实现,特此记录,以备后用。--by RYHAN
C#程序集 dll 文件
using System; using System.IO; using System.Text; using System.Data; using System.Data.SqlTypes; using System.Security.Cryptography; using Microsoft.SqlServer.Server; public class DES { [SqlFunction(IsDeterministic=true, IsPrecise=true)] public static SqlString DESEncrypt(SqlString text, SqlString key) { if (text.IsNull || key.IsNull || key.Value.Length < 8) return null; return (SqlString)_DESEncrypt(Encoding.Default.GetBytes((string)text), Encoding.Default.GetBytes((string)key), new byte[] { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF }); } // Encrypt with DES private static string _DESEncrypt(byte[] text, byte[] key, byte[] iv) { string entext; using (MemoryStream mstream = new MemoryStream()) { DESCryptoServiceProvider des = new DESCryptoServiceProvider(); CryptoStream estream = new CryptoStream(mstream, des.CreateEncryptor(key, iv), CryptoStreamMode.Write); try { estream.Write(text, 0, text.Length); estream.FlushFinalBlock(); entext = Convert.ToBase64String(mstream.ToArray()); } finally { estream.Close(); des.Clear(); } } return entext; } [SqlFunction(IsDeterministic=true, IsPrecise=true)] public static SqlString DESDecrypt(SqlString text, SqlString key) { if (text.IsNull || key.IsNull || key.Value.Length < 8) return null; return (SqlString)_DESDecrypt(Convert.FromBase64String((string)text), Encoding.Default.GetBytes((string)key), new byte[] { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF }); } // Decrypt with DES private static string _DESDecrypt(byte[] text, byte[] key, byte[] iv) { string detext; using (MemoryStream mstream = new MemoryStream()) { DESCryptoServiceProvider des = new DESCryptoServiceProvider(); CryptoStream estream = new CryptoStream(mstream, des.CreateDecryptor(key, iv), CryptoStreamMode.Write); try { estream.Write(text, 0, text.Length); estream.FlushFinalBlock(); detext = Encoding.Default.GetString(mstream.ToArray()); } finally { estream.Close(); des.Clear(); } } return detext; } }
SQL CLR 函数
use master go -- 启用 SQL Server 的 CLR 功能 exec sp_configure 'show advanced options',1; go reconfigure go exec sp_configure 'clr enabled',1; go reconfigure go if object_id('dbo.des_encrypt','FS') is not null drop function dbo.des_encrypt; go if object_id('dbo.des_decrypt','FS') is not null drop function dbo.des_decrypt; go -- 创建程序集 if exists (select * from sys.assemblies where name='DES') drop assembly DES; go create assembly DES authorization dbo from 'C:\clrDES.dll' -- dll 文件路径 with permission_set=safe; go create function dbo.des_encrypt (@text nvarchar(max), @key nvarchar(128)) returns nvarchar(max) as external name DES.DES.DESEncrypt; go -- select dbo.des_encrypt(N'hello world', N'88888888'); create function dbo.des_decrypt (@text nvarchar(max), @key nvarchar(128)) returns nvarchar(max) as external name DES.DES.DESDecrypt; go -- select dbo.des_decrypt(N'+GeLDT6kAxZlm2pnFX8X4w==',N'88888888');
因业务升级,将原用户DES密文转换为MD5,需要在SQL中进行DES解密操作,故使用CLR函数实现,特此记录,以备后用。--by RYHAN
相关文章推荐
- C# 直接调用非托管代码的方法
- 使用C#调用cmd来执行sql脚本
- C# Web Service 不使用服务引用直接调用方法
- C# asp.net SQL存储过程写法Insert 插入语句,及其在asp.net中的调用方法
- OAF学习笔记-8-在AM中直接调用sql 语句(PLSQL函数)
- C#如何直接调用非托管代码
- c#直接调用ssis包实现Sql Server的数据导入功能
- C#中调用SQL存储过程实现登录认证
- 如何使用T-SQL备份还原数据库及c#如何调用执行?
- C# 直接执行、调用本机代码、汇编代码 shell Native Code(转)
- C# 调用系统API函数直接连接pos打印机 打印
- .Net/C#应用程序直接读取本地Cookies文件(由于WinXPSP2调用API:InternetGetCookie无果)
- C# 调用SQL的存储过程的接口及实现
- OAF学习笔记-8-在AM中直接调用sql 语句(PLSQL函数)
- sql自定义函数及C#中调用
- C# 调用配置文件SQL语句 真2B!
- C#调用SQL事务时出现的一个问题
- AES加解密源码(直接可调用)
- C# 调用并执行SQL脚本文件
- c#调用des64.dll进行加密解密