首页 > 其他分享 >Abp加密模块

Abp加密模块

时间:2022-08-14 17:57:01浏览次数:67  
标签:加密 string Sm4Provider Abp 模块 com public

ABP加密模块

最近项目中用到了加密,且甲方要求必须要求国标加密。

项目使用的是ABP开发,所以写了此模块(可以单独使用,也可以加密数据库字段)。

这里引用一个博主的文章内容

引用地址:https://www.cnblogs.com/iainYang/p/16106581.html  (侵删找我哦!)

  1. 单独使用

    1. 1  引用GuiLi.Abp.Crypto包

  1. 2  声明依赖

    添加[DependsOn(typeof(AbpCryptoModule))]到你项目的ABP Module类 

[DependsOn(
    //...other dependencies
    typeof(AbpCryptoModule) //Add the new module dependency
)]
public class YourModule : AbpModule
{
}

  1.3 在appsettings.json配置Sm4 Key, Iv, CryptoMode

"Sm4": {
    "Key": "Ynxyj.comYnxyj.com",
    "Iv": "mocmocmomocmocmo3434",
    // ECB(电码本模式)=0,CBC(密码分组链接模式)=1
    "CryptoMode": 1
 }

  1.4 ISm4Provider

    使用 ISm4Provider 接口来使用SM4加密或者解密

public class Sm4AppService : InventoryAppServiceBase, ISm4AppService
    {
        protected ISm4Provider Sm4Provider { get; }
        public Sm4AppService(
            ISm4Provider sm4Provider)
        {
            Sm4Provider = sm4Provider;
        }

        /// <summary>
        /// 加密
        /// </summary>
        /// <param name="dataToEncrypt"></param>
        /// <param name="needEnCode">1、哈希加密;2、base64加密</param>
        /// <returns></returns>
        public string Encrypt(string dataToEncrypt, int needEnCode = 1)
        {
            return Sm4Provider.Encrypt(dataToEncrypt, needEnCode);
        }

        /// <summary>
        /// 解密
        /// </summary>
        /// <param name="dataToDecrypt"></param>
        /// <param name="needEnCode">1、哈希加密;2、base64加密</param>
        /// <returns></returns>
        public string Decrypt(string dataToDecrypt, int needEnCode = 1)
        {
            return Sm4Provider.Decrypt(dataToDecrypt, needEnCode);
        }
    }

   2. 加密数据库字段

    2.2  引用GuiLi.Abp.Crypto.EntityFrameworkCore包

  2.2  声明依赖

    添加[DependsOn(typeof(AbpCryptoEntityFrameworkCoreModule))]到你项目的ABP Module类

[DependsOn(
    //...other dependencies
    typeof(AbpCryptoEntityFrameworkCoreModule) //Add the new module dependency
)]
public class YourModule : AbpModule
{
}

  2.3 在appsettings.json配置Sm4 Key, Iv, CryptoMode

"Sm4": {
    "Key": "Ynxyj.comYnxyj.com",
    "Iv": "mocmocmomocmocmo3434",
    // ECB(电码本模式)=0,CBC(密码分组链接模式)=1
    "CryptoMode": 1
 }

  2.4 在DbContext构造函数创建IEncryptionProvider实例

public abstract class MyDbContext<TDbContext> : AbpDbContext<TDbContext>, ITransientDependency
        where TDbContext : DbContext
    {
        public IEncryptionFactory EncryptionFactory { get; set; }
        protected MyDbContext(
            DbContextOptions<TDbContext> options)
        : base(options)
        {

        }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.UseEncryption(EncryptionFactory.Create("SM4")); // SM4加解密
            base.OnModelCreating(modelBuilder);
        }
    }

  2.5 在所需要加密的字段加上EncryptedAttribute,表示这个字段需要加密

[Encrypted]
public virtual string Name { get; protected set; }

  2.6 效果

    利用efcore的值转换器,在写入的时候加密,读取的时候解密

    

本文代码地址

https://github.com/longxiansheng/Abp.Crypto
https://gitee.com/guili95/Abp.Crypto

 

标签:加密,string,Sm4Provider,Abp,模块,com,public
From: https://www.cnblogs.com/guili/p/16585796.html

相关文章

  • Ansible 命令模块操作
    目录Ansible命令模块操作Ansible清单部署Ansible清单文件静态清单INI格式定义嵌套组静态清单示例通过规范简化主机规格验证清单覆盖清单的位置在清单中定义变量Ansibl......
  • 第7章 函数——C++的编程模块
    第7章函数——C++的编程模块7.8编程练习题第1题#include<iostream>usingnamespacestd;//编写一个程序,不断要求用户输入两个数,直到其中的一个为0.//对于两......
  • 2022.8.14 模块化、Webpack、Vue-element-admin
    06、模块化相当于形成包6.1、简介模块化产生的背景随着网站逐渐变成”互联网应用程序”,嵌入网页的Javascript代码越来越庞大,越来越复杂。Javascript模块化编程,已经成......
  • 时间模块time-常用方法
    时间戳#获取时间戳time.time()#时间元组转为时间戳time.mktime(time.localtime())时间元组#获取时间元组time.localtime()#time.struct_time( #年月日 #......
  • https数据传输流程 加密
    客户端先从服务器获取到证书,证书中包含公钥客户端将证书进行校验客户端生成一个对称密钥,用证书中的公钥进行加密,发送给服务器服务器得到这个请求后用私钥进行解密,得到......
  • RS256 - java具体使用 非对称加密算法 - 总结心得
    1.背景有个需求需要在java使用非对称加密RS256算法,网上博客都翻篇了,基本都是赋值粘贴,没有个是可用的,80%都是粘贴了一篇c#语言写的代码,什么风气?以前的博客氛围哪里......
  • cmd下执行pytest报错找不到文件模块
     现象:ModuleNotFoundError:Nomodulenamed'common'  解决方案:文件开头加入代码importos,syssys.path.append(os.getcwd())如果你对自己没有观察,对自己没有觉......
  • 物联网赛程各模块笔记目录
    ReadMeWelcometomyblog!【物联网网络搭建与配置】Visio绘图【物联网网络搭建与配置】物联网基础知识总结【物联网平台运行维护】数据库系统维护总结【物联网平台运......