ABP加密模块
最近项目中用到了加密,且甲方要求必须要求国标加密。
项目使用的是ABP开发,所以写了此模块(可以单独使用,也可以加密数据库字段)。
这里引用一个博主的文章内容
引用地址:https://www.cnblogs.com/iainYang/p/16106581.html (侵删找我哦!)
-
单独使用
- 1 引用GuiLi.Abp.Crypto包
- 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