Я использую шаблон CQRS в архитектуре Onion, шифрую личные данные пользователя, такие как адрес электронной почты, номер телефона и адрес, и сохраняю их в базе данных. Я не мог прийти к выводу, следует ли мне шифровать каждую информацию отдельно или если сделать это все сразу, я смогу получить более точный и оптимизированный результат. Можете ли вы высказать мне свое мнение по этому поводу?
Вот часть моего кода, которую я зашифровал один за другим:
createUserDto.Email = await _cryptoHelperService.EncryptString(request.Email);
createUserDto.Address = await _cryptoHelperService.EncryptString(request.Address);
createUserDto.GSM = await _cryptoHelperService.EncryptString(request.GSM);
createUserDto.GSMPersonal = await _cryptoHelperService.EncryptString(request.GSMPersonal);
Мой метод параллельного шифрования, который я использовал сразу:
private async Task EncryptAndAssignAsync(Action propertySetter, string value)
{
var encryptedValue = await _cryptoHelperService.EncryptString(value);
propertySetter(encryptedValue);
}
var encryptTasks = new List
{
EncryptAndAssignAsync(val => createUserDto.Email = val, request.Email),
EncryptAndAssignAsync(val => createUserDto.Address = val, request.Address),
EncryptAndAssignAsync(val => createUserDto.GSM = val, request.GSM),
EncryptAndAssignAsync(val => createUserDto.GSMPersonal = val, request.GSMPersonal)
};
await Task.WhenAll(encryptTasks);
Вот и весь метод:
public class CreateUserCommandHandler : IRequestHandler
{
private readonly IUserService _userService;
private readonly ICryptographyService _cryptoHelperService;
private readonly IMapper _mapper;
public CreateUserCommandHandler(IUserService userService, ICryptographyService cryptoHelperService, IMapper mapper)
{
_userService = userService;
_cryptoHelperService = cryptoHelperService;
_mapper = mapper;
}
private async Task EncryptAndAssignAsync(Action propertySetter, string value)
{
var encryptedValue = await _cryptoHelperService.EncryptString(value);
propertySetter(encryptedValue);
}
public async Task Handle(CreateUserCommandRequest request, CancellationToken cancellationToken)
{
var startTime = DateTime.UtcNow;
OptResult response = new OptResult();
return await ExceptionHandler.HandleOptResultAsync(async () =>
{
var createUserDto = _mapper.Map(request);
createUserDto.Guid = Guid.NewGuid().ToString();
createUserDto.Email = await _cryptoHelperService.EncryptString(request.Email);
createUserDto.Address = await _cryptoHelperService.EncryptString(request.Address);
createUserDto.GSM = await _cryptoHelperService.EncryptString(request.GSM);
createUserDto.GSMPersonal = await _cryptoHelperService.EncryptString(request.GSMPersonal);
var encryptTasks = new List
{
EncryptAndAssignAsync(val => createUserDto.Email = val, request.Email),
EncryptAndAssignAsync(val => createUserDto.Address = val, request.Address),
EncryptAndAssignAsync(val => createUserDto.GSM = val, request.GSM),
EncryptAndAssignAsync(val => createUserDto.GSMPersonal = val, request.GSMPersonal)
};
await Task.WhenAll(encryptTasks);
var createdUser = await _userService.CreateAsync(createUserDto);
string DescryptedEmail = await _cryptoHelperService.DecryptString(createUserDto.Email);
string DescryptedGSM = await _cryptoHelperService.DecryptString(createUserDto.GSM);
var endTime = DateTime.UtcNow;
// Geçen süreyi hesapla
var elapsedTime = endTime - startTime;
Console.WriteLine($"İşlem tamamlandı. Geçen süre: {elapsedTime.TotalMilliseconds} ms");
if (createUserDto != null)
{
response.Succeeded = true;
response.Data = new CreateUserCommandResponse
{
Id = createUserDto.Guid,
UserName = createUserDto.UserName,
Email = DescryptedEmail,
GSM = DescryptedGSM,
};
}
else
{
response.Succeeded = false;
response.Message = "User creation failed.";
}
return response;
});
}
}
Подробнее здесь: https://stackoverflow.com/questions/786 ... rocess-the
Что лучше в .NET Core: зашифровать несколько значений одновременно или обрабатывать их параллельно? ⇐ C#
Место общения программистов C#
1719321416
Anonymous
Я использую шаблон CQRS в архитектуре Onion, шифрую личные данные пользователя, такие как адрес электронной почты, номер телефона и адрес, и сохраняю их в базе данных. Я не мог прийти к выводу, следует ли мне шифровать каждую информацию отдельно или если сделать это все сразу, я смогу получить более точный и оптимизированный результат. Можете ли вы высказать мне свое мнение по этому поводу?
Вот часть моего кода, которую я зашифровал один за другим:
createUserDto.Email = await _cryptoHelperService.EncryptString(request.Email);
createUserDto.Address = await _cryptoHelperService.EncryptString(request.Address);
createUserDto.GSM = await _cryptoHelperService.EncryptString(request.GSM);
createUserDto.GSMPersonal = await _cryptoHelperService.EncryptString(request.GSMPersonal);
Мой метод параллельного шифрования, который я использовал сразу:
private async Task EncryptAndAssignAsync(Action propertySetter, string value)
{
var encryptedValue = await _cryptoHelperService.EncryptString(value);
propertySetter(encryptedValue);
}
var encryptTasks = new List
{
EncryptAndAssignAsync(val => createUserDto.Email = val, request.Email),
EncryptAndAssignAsync(val => createUserDto.Address = val, request.Address),
EncryptAndAssignAsync(val => createUserDto.GSM = val, request.GSM),
EncryptAndAssignAsync(val => createUserDto.GSMPersonal = val, request.GSMPersonal)
};
await Task.WhenAll(encryptTasks);
Вот и весь метод:
public class CreateUserCommandHandler : IRequestHandler
{
private readonly IUserService _userService;
private readonly ICryptographyService _cryptoHelperService;
private readonly IMapper _mapper;
public CreateUserCommandHandler(IUserService userService, ICryptographyService cryptoHelperService, IMapper mapper)
{
_userService = userService;
_cryptoHelperService = cryptoHelperService;
_mapper = mapper;
}
private async Task EncryptAndAssignAsync(Action propertySetter, string value)
{
var encryptedValue = await _cryptoHelperService.EncryptString(value);
propertySetter(encryptedValue);
}
public async Task Handle(CreateUserCommandRequest request, CancellationToken cancellationToken)
{
var startTime = DateTime.UtcNow;
OptResult response = new OptResult();
return await ExceptionHandler.HandleOptResultAsync(async () =>
{
var createUserDto = _mapper.Map(request);
createUserDto.Guid = Guid.NewGuid().ToString();
createUserDto.Email = await _cryptoHelperService.EncryptString(request.Email);
createUserDto.Address = await _cryptoHelperService.EncryptString(request.Address);
createUserDto.GSM = await _cryptoHelperService.EncryptString(request.GSM);
createUserDto.GSMPersonal = await _cryptoHelperService.EncryptString(request.GSMPersonal);
var encryptTasks = new List
{
EncryptAndAssignAsync(val => createUserDto.Email = val, request.Email),
EncryptAndAssignAsync(val => createUserDto.Address = val, request.Address),
EncryptAndAssignAsync(val => createUserDto.GSM = val, request.GSM),
EncryptAndAssignAsync(val => createUserDto.GSMPersonal = val, request.GSMPersonal)
};
await Task.WhenAll(encryptTasks);
var createdUser = await _userService.CreateAsync(createUserDto);
string DescryptedEmail = await _cryptoHelperService.DecryptString(createUserDto.Email);
string DescryptedGSM = await _cryptoHelperService.DecryptString(createUserDto.GSM);
var endTime = DateTime.UtcNow;
// Geçen süreyi hesapla
var elapsedTime = endTime - startTime;
Console.WriteLine($"İşlem tamamlandı. Geçen süre: {elapsedTime.TotalMilliseconds} ms");
if (createUserDto != null)
{
response.Succeeded = true;
response.Data = new CreateUserCommandResponse
{
Id = createUserDto.Guid,
UserName = createUserDto.UserName,
Email = DescryptedEmail,
GSM = DescryptedGSM,
};
}
else
{
response.Succeeded = false;
response.Message = "User creation failed.";
}
return response;
});
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/78667533/in-net-core-is-it-better-to-encrypt-multiple-values-at-once-or-to-process-the[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия