从 .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();
}
没有HashSizeValue
或State
。
我们是否仍应使用 HashAlgorithm
作为 .NET Core 中自己算法的基础 class?
在您的 class 中,实现一个
public override int HashSize => 256;
(或您拥有的值)。
如果您使用的是 HashSizeValue
,请将其更改为 HashSize
。
如果您使用的是 State
,请将其读作 protected int State
。在 "full" HashAlgorithm
中,它被两个 public 方法(TransformBlock
和 TransformFinalBlock
)使用。如果您需要它(并且您正在使用 TransformBlock
和 TransformFinalBlock
),请从更新版本的 .NET Core HashAlgorithm
复制它(您可以在 github 上找到它)。如果你只是检查它那么你不需要它并且你可以评论它(因为只有两个缺少的方法会写它)。
在 .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();
}
没有HashSizeValue
或State
。
我们是否仍应使用 HashAlgorithm
作为 .NET Core 中自己算法的基础 class?
在您的 class 中,实现一个
public override int HashSize => 256;
(或您拥有的值)。
如果您使用的是 HashSizeValue
,请将其更改为 HashSize
。
如果您使用的是 State
,请将其读作 protected int State
。在 "full" HashAlgorithm
中,它被两个 public 方法(TransformBlock
和 TransformFinalBlock
)使用。如果您需要它(并且您正在使用 TransformBlock
和 TransformFinalBlock
),请从更新版本的 .NET Core HashAlgorithm
复制它(您可以在 github 上找到它)。如果你只是检查它那么你不需要它并且你可以评论它(因为只有两个缺少的方法会写它)。