Что лучше в .NET Core: зашифровать несколько значений одновременно или обрабатывать их параллельно?C#

Место общения программистов C#
Ответить
Anonymous
 Что лучше в .NET Core: зашифровать несколько значений одновременно или обрабатывать их параллельно?

Сообщение 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;
});
}
}


Подробнее здесь: https://stackoverflow.com/questions/786 ... rocess-the
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»