【发布时间】:2017-09-07 20:15:25
【问题描述】:
在 .NET Framework 中,如果我们需要创建自己的加密算法,我们可以创建自己的类,例如:
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 中自己算法的基类吗?
【问题讨论】:
-
我们自己的加密算法您正在创建一个哈希算法。这是不同的。
-
如果您是从头开始构建哈希算法,那么
HashSizeValue有什么用处(这是一个未公开的属性)? 你通过HashSize属性声明你的算法的哈希大小。对于State...如果你需要State,你保持状态。 -
@xanatos 我实际上在做什么我正在将代码从 .NET Framework 移植到 .NET Core。那里的加密算法使用 HashAlgorithm 作为基类。这就是我问的原因
-
.NET Core 中的正确方法是什么?使用某些基类或没有类?
-
正确的方法是从
HashAlgorithm派生。请注意,他们 (Microsoft) 在 11 月 (github.com/dotnet/corefx/commit/…) 和以前的版本中读取了这两个字段。如果您需要它们,则必须阅读它们。State由TransformBlock/TransformFinalBlock使用,.NET Core 1.1HashAlgorithm没有实现。
标签: c# .net cryptography .net-core hashalgorithm