Skip to content

Улучшения для MD5 hash #74

@Kataane

Description

@Kataane

Добрый день.
Спасибо большое за подобную библиотеку и Ваш труд. Хотелось бы внести немного помощи.

В Md5HashFunction.cs, HashFunctionBase.cs и в ByteUtility.cs
используется устаревшая логика для создания MD5 hash на основе строки.

Примерно с .NET 5 появились MD5.HashData и Convert.ToHexString

Что позволяет делать примерно так:

public override string Invoke(RenderSettings settings, string argument1) {
  var buffer = Encoding.UTF8.GetBytes(argument1);
  
  Span<byte> hash = stackalloc byte[MD5.HashSizeInBytes];
  MD5.HashData(buffer, hash);
  
  return Convert.ToHexString(hash);
}

На сколько это лучше?

Method Size Mean Error StdDev Rank Gen0 Allocated
Md5WithStackallockAndStatic 10000 392.1 ns 7.55 ns 7.76 ns 1 0.0210 88 B
Md5WithStackallockAndStatic 10 394.0 ns 4.49 ns 3.98 ns 1 0.0210 88 B
Md5WithStackallockAndStatic 50 394.9 ns 5.04 ns 4.21 ns 1 0.0210 88 B
Md5WithStackallockAndStatic 100 395.3 ns 3.47 ns 3.25 ns 1 0.0210 88 B
Md5WithStackallockAndStatic 1000 398.1 ns 6.02 ns 5.03 ns 1 0.0210 88 B
Md5WithUsing 10000 1,140.0 ns 10.83 ns 9.60 ns 2 0.2499 1048 B
Md5WithUsing 50 1,150.3 ns 8.98 ns 7.01 ns 2 0.2499 1048 B
Md5WithUsing 1000 1,152.3 ns 14.84 ns 13.16 ns 2 0.2499 1048 B
Md5WithUsing 100 1,156.4 ns 22.71 ns 24.30 ns 2 0.2499 1048 B
Md5WithUsing 10 1,156.8 ns 8.38 ns 7.84 ns 2 0.2499 1048 B

Если нужна подробная информация, тесты и бенчмарки:
https://github.com/Kataane/MD5Hash

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions