从 .NET Core 中的 HashAlgorithm 派生

Deriving from HashAlgorithm in .NET Core

在 .NET Framework 中,如果我们需要创建自己的加密算法,我们可以创建自己的 class,例如:

public class MyAlgorithm: System.Security.Cryptography.HashAlgorithm
{
}

但在 .NET Core 中似乎非常有限,因为

public abstract class HashAlgorithm : IDisposable
    {     

    protected HashAlgorithm();    
    public virtual int HashSize { get; }    
    public byte[] ComputeHash(byte[] buffer);
    public byte[] ComputeHash(byte[] buffer, int offset, int count);
    public byte[] ComputeHash(Stream inputStream);
    public void Dispose();
    public abstract void Initialize();
    protected virtual void Dispose(bool disposing);
    protected abstract void HashCore(byte[] array, int ibStart, int cbSize);
    protected abstract byte[] HashFinal();
}

没有HashSizeValueState

我们是否仍应使用 HashAlgorithm 作为 .NET Core 中自己算法的基础 class?

在您的 class 中,实现一个

public override int HashSize => 256;

(或您拥有的值)。

如果您使用的是 HashSizeValue,请将其更改为 HashSize

如果您使用的是 State,请将其读作 protected int State。在 "full" HashAlgorithm 中,它被两个 public 方法(TransformBlockTransformFinalBlock)使用。如果您需要它(并且您正在使用 TransformBlockTransformFinalBlock),请从更新版本的 .NET Core HashAlgorithm 复制它(您可以在 github 上找到它)。如果你只是检查它那么你不需要它并且你可以评论它(因为只有两个缺少的方法会写它)。