要在Aspnetboilerplate中实现实体的加密和解密,可以按照以下步骤操作:
System.Security.Cryptography
。using System;
using System.IO;
using System.Security.Cryptography;
using Abp.Domain.Services;
namespace YourNamespace
{
public class EncryptionService : DomainService, IEncryptionService
{
private const string EncryptionKey = "your-encryption-key";
public string Encrypt(string plainText)
{
byte[] clearBytes = System.Text.Encoding.Unicode.GetBytes(plainText);
using (Aes encryptor = Aes.Create())
{
Rfc2898DeriveBytes pdb = new Rfc2898DeriveBytes(EncryptionKey, new byte[] {
0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76
});
encryptor.Key = pdb.GetBytes(32);
encryptor.IV = pdb.GetBytes(16);
using (MemoryStream ms = new MemoryStream())
{
using (CryptoStream cs = new CryptoStream(ms, encryptor.CreateEncryptor(), CryptoStreamMode.Write))
{
cs.Write(clearBytes, 0, clearBytes.Length);
cs.Close();
}
plainText = Convert.ToBase64String(ms.ToArray());
}
}
return plainText;
}
public string Decrypt(string cipherText)
{
cipherText = cipherText.Replace(" ", "+");
byte[] cipherBytes = Convert.FromBase64String(cipherText);
using (Aes encryptor = Aes.Create())
{
Rfc2898DeriveBytes pdb = new Rfc2898DeriveBytes(EncryptionKey, new byte[] {
0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76
});
encryptor.Key = pdb.GetBytes(32);
encryptor.IV = pdb.GetBytes(16);
using (MemoryStream ms = new MemoryStream())
{
using (CryptoStream cs = new CryptoStream(ms, encryptor.CreateDecryptor(), CryptoStreamMode.Write))
{
cs.Write(cipherBytes, 0, cipherBytes.Length);
cs.Close();
}
cipherText = System.Text.Encoding.Unicode.GetString(ms.ToArray());
}
}
return cipherText;
}
}
}
using Abp.Domain.Services;
namespace YourNamespace
{
public interface IEncryptionService : IDomainService
{
string Encrypt(string plainText);
string Decrypt(string cipherText);
}
}
YourProjectName.Core
项目中的YourProjectNameCoreModule.cs
文件中,添加以下代码:using YourNamespace;
namespace YourProjectName
{
[DependsOn(typeof(YourProjectNameCoreModule))]
public class YourProjectNameCoreModule : AbpModule
{
public override void PreInitialize()
{
// 注册加密服务类
IocManager.Register(DependencyLifeStyle.Transient);
}
// ...
}
}
现在,你可以在需要加密和解密实体的地方注入IEncryptionService
接口,并使用Encrypt
和Decrypt
方法对实体进行加密和解密。例如:
using Abp.Domain.Services;
namespace YourNamespace
{
public class YourEntityManager : DomainService
{
private readonly IEncryptionService _encryptionService;
public YourEntityManager(IEncryptionService encryptionService)
{
_encryptionService = encryptionService;
}
public void SaveYourEntity(YourEntity entity)
{
// 加密实体的敏感数据
entity.SensitiveData = _encryptionService.Encrypt(entity.SensitiveData);
// 保存实体到数据库
// ...
}
public YourEntity GetYourEntity(int id)
{
// 获取实体从数据库