SQL Server中调用C#类中的方法实例(使用.NET程序集)

2023-05-16

SQL Server中调用C#类中的方法实例(使用.NET程序集)SQL Server: Could not find type in the assembly服务器可能资源不足,或者不信任该程序集,因为它的 PERMISSION_SET 设置为 EXTERNAL_ACCESS 或 UNSAFE。

配置类库

using Microsoft.SqlServer.Server;
using System;
using System.Collections.Generic;
using System.Data.SqlTypes;
using System.IO;
using System.Security.Cryptography;
using System.Text;

namespace CryptHelper
{
    public static class AESHelper
    {
        private const string AES_Key = "1234567890123456";

        //为什么要用base64,因为得到的密文是byte[],所以默认用base64转成str方便查看
        // AES 加密的初始化向量,加密解密需设置相同的值。需要是16字节
        public readonly static byte[] AES_IV = Encoding.UTF8.GetBytes("Dy1;09w0x#0zR>'}");

        /// <summary>
        ///  加密
        /// </summary>
        /// <param name="key">密钥</param>
        /// <param name="data">待加密数据</param>
        /// <returns>加密后的数据</returns>
        [SqlMethod]
        public static SqlString Encrypt(string data)
        {
            string key = AES_Key;
            using (AesCryptoServiceProvider aesAlg = new AesCryptoServiceProvider())
            {
                aesAlg.Key = Encoding.UTF8.GetBytes(key);
                aesAlg.IV = AES_IV;
                ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);
                using (MemoryStream msEncrypt = new MemoryStream())
                {
                    using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
                    {
                        using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
                        {
                            swEncrypt.Write(data);
                        }
                        byte[] bytes = msEncrypt.ToArray();
                        return new SqlString(Convert.ToBase64String(bytes));
                    }
                }
            }
        }

        /// <summary>
        /// 解密
        /// </summary>
        /// <param name="key">密钥</param>
        /// <param name="encryptData">已加密数据</param>
        /// <returns>原数据</returns>
        [SqlMethod]
        public static SqlString Decrypt(string encryptData)
        {
            string key = AES_Key;
            byte[] inputBytes = Convert.FromBase64String(encryptData);
            using (AesCryptoServiceProvider aesAlg = new AesCryptoServiceProvider())
            {
                aesAlg.Key = Encoding.UTF8.GetBytes(key);
                aesAlg.IV = AES_IV;

                ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);
                using (MemoryStream msEncrypt = new MemoryStream(inputBytes))
                {
                    using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, decryptor, CryptoStreamMode.Read))
                    {
                        using (StreamReader srEncrypt = new StreamReader(csEncrypt))
                        {
                            return new SqlString(srEncrypt.ReadToEnd());
                        }
                    }
                }
            }
        }
    }
}

配置数据库

更改数据库的一些配置

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 
ALTER DATABASE vv_DB SET TRUSTWORTHY on;
go

新建程序集

新建function

CREATE FUNCTION AESEncrypt(@data NVARCHAR(max))
RETURNS NVARCHAR(max)
AS
EXTERNAL NAME CryptHelper.[CryptHelper.AESHelper].Encrypt
go

CREATE FUNCTION AESDecrypt(@data NVARCHAR(max))
RETURNS NVARCHAR(max)
AS
EXTERNAL NAME CryptHelper.[CryptHelper.AESHelper].Decrypt
go

调用

select dbo.AESEncrypt('giao')
select dbo.AESDecrypt('encryptGiao')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL Server中调用C#类中的方法实例(使用.NET程序集) 的相关文章

  • 使用windows引导的ubuntu双操作系统

    避坑指南 bios 取消安全boot 安全启动 快速启动 报rst错误的 把 bois 里的 SATA config 把inter 改为ahci 没报请无视 作为码农 xff0c 总会时不时的需要使用linux的开发环境 xff0c 使用虚
  • 想听一首歌好难?程序员教你一键下载

    1 首先要先安装一下Python第三方库 requests pip install requestsprettytable pip install PrettyTable 2 使用的开发环境 xff1a 版 本 xff1a python 3
  • 圣诞要到了~教你用Python制作一个表白神器——照片墙,祝你成功

    马上圣诞节 xff0c 快到了 xff01 又到了一年一度表白的时候了 今天教你一个程序员方式的表白 xff01 看一下效果图 xff1a 要什么样的 xff0c 图案都可以自定义的 首先 xff0c 准备阶段 收集你喜欢人 xff08 或
  • python字典遍历

    对python中的字典进行遍历操作 a span class token operator 61 span span class token punctuation span span class token punctuation spa
  • python读取文件指定行的三种方法

    1 行遍历实现 在python中如果要将一个文件完全加载到内存中 xff0c 通过file readlines 即可 xff0c 但是在文件占用较高时 xff0c 我们是无法完整的将文件加载到内存中的 xff0c 这时候就需要用到pytho
  • Python中五种方式拼接字符串的正确方法

    在学习Python xff08 3x xff09 的过程中 xff0c 在拼接字符串的时候遇到了些问题 xff0c 所以抽点时间整理一下Python 拼接字符串的几种方式 方式1 使用加号 43 连接 使用加号连接各个变量或者元素必须是字符
  • Python类与对象详解

    一 类和对象 类的意思 xff1a 种类 分类 类别 对象是特征与技能的结合体 xff0c 我可能有身高体重 而你也有身高体重 xff0c 所以你会说你像我 xff0c 但是你一定不会说你像阿猫阿狗 并且我和你其实就可以说成是一类 xff0
  • Python如何连接Mysql及基本操作

    1 什么要做python连接mysql xff0c 一般是解决什么问题的 做自动化测试时候 xff0c 注册了一个新用户 xff0c 产生了多余的数据 xff0c 下次同一个账号就无法注册了 xff0c 这种情况怎么办呢 xff1f 自动化
  • python中sort和sorted的高级排序技巧

    Python list内置sort 方法用来排序 xff0c 也可以用python内置的全局sorted 方法来对可迭代的序列排序生成新的序列 1 排序基础 简单的升序排序是非常容易的 只需要调用sorted 方法 它返回一个新的list
  • python用户定义的迭代器

    1 迭代器基于下面两个个方法 xff1a xff08 1 xff09 next 返回容器的下一个项目 xff08 2 xff09 iter 返回迭代器本身 2 当序列遍历完时 xff0c 将抛出StopIteration异常 xff0c 所
  • 虚拟机管理和虚拟机快照

    虚拟机管理 virt manager 开启图形管理工具 virt viewer vmname 显示虚拟机 vmname表示虚拟机名称 virsh list 列出正在运行的vm virsh list all 列出所有vm virsh star
  • 卷积神经网络中的图像特征——以YOLOv5为例进行可视化

    目录 一 图像特征1 图像低层特征2 图像高层特征3 示例 二 特征融合1 多尺度特征融合2 FPN 参考文章 一 图像特征 1 图像低层特征 图像低层特征指的是 xff1a 边缘 颜色和纹理等特征 低层特征的分辨率较高 xff0c 包含较
  • web端mpr(多平面重建)的实现

    mpr 二维多平面重建 Multiplanar reconstruction xff0c MPR 是被大量用于分析电脑断层扫描影像的技术 可用于在正交平面 冠状 矢状 轴向或倾斜 xff0c 选择任意平面 中重建影像 xff0c 这可以帮助
  • 带参数和不带参数装饰器区别

    usr bin env python 2 encoding utf 8 3 def start info 4 print 39 电视剧开头曲 39 5 print 39 开始唱歌 39 6 def end info 7 print 39 电
  • python字典get方法

    python中字典的get方法 xff0c 返回对应key的value值 xff0c 并可以指定默认值 a span class token operator 61 span span class token punctuation spa
  • Java中collection和collections的区别和作用

    其实很久之前就想写一篇了 xff0c 主要是加深印象 因为我一次面试的时候 xff0c 我和面试官侃侃而谈 xff0c 你一句啊我一堆 xff0c 你一句啊我一堆 xff0c 就在这时 xff0c 面试官让我谈谈collection和col
  • 关于阅读论文的一些感想

    关于阅读论文的一些感想 最近看了一些论文 xff0c 也和同学在交谈中学习到了一些关于阅读时应该有的态度 xff0c 这里记录一下 原文地址 xff1a https www yuque com lart papers dgrl EpF76
  • Centos 8中使用Packstack(RDO)快速安装openstack Victoria版

    OpenStack介绍 openstack详细介绍及常用命令请查看此文 通过Packstack RDO 部署OpenStack xff0c 官方文档点击此处查看 安装环境 工具 xff1a VMware Workstation 16 Pro
  • Ubuntu14.04安装内核

    0 前言 Ubuntu14 04安装Linux头文件 和 Ubuntu14 04安装Linux源码 分别介绍了Ubuntu14 04中安装Linux头文件和源码的方法 xff0c 这里进一步介绍安装Linux内核镜像的方法 1 安装内核镜像
  • cocos2d-remove和fastremove问题详解

    在用CCARRAY FOREACH的时候 Ref obj CCARRAY FOREACH obj array 当你在上面的宏里面执行remove的时候 xff0c 在这一帧里面 头指针 xff0c 和尾指针是不动的 所以当你用了array

随机推荐