首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有自定义HashAlgorithm的HMAC

具有自定义HashAlgorithm的HMAC
EN

Stack Overflow用户
提问于 2017-08-18 19:33:13
回答 1查看 196关注 0票数 1

有内置在HMAC中的(HMACSHA1 - HMACSHA512 ...)。但是,是否可以使用自定义HashAlgorithm类创建一个HMAC?

我试过HMAC.Create("location"),但它抛出了一个NullReferenceException

有没有像new HMAC(HashAlgorithm)这样的构造函数?

这是HashAlgorithm (Fnv1哈希)的代码:

代码语言:javascript
复制
public class Fnv1_32 : HashAlgorithm
{
    private const uint prime = 0x01000193;
    private const uint offsetbasis = 0x811C9DC5;
    private uint _Hash;

    public Fnv1_32()
    {
        this.Initialize();
        this.HashSizeValue = 32;
    }

    public override void Initialize()
    {
        this._Hash = offsetbasis;
    }

    protected override void HashCore(byte[] array, int ibStart, int cbSize)
    {
        for (var i = ibStart; i < cbSize; i++)
        {
            this._Hash *= prime;
            this._Hash ^= array[i];
        }
    }

    protected override byte[] HashFinal()
    {
        return BitConverter.GetBytes(this._Hash);
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-18 23:25:04

在.NET框架中,您可以通过如下方式完成此操作

代码语言:javascript
复制
public class HMACFnv1_32 : HMAC
{
    private const string Fnv1CryptoConfigId = "Fnv1_32";

    static HMACFnv1_32()
    {
        CryptoConfig.AddAlgorithm(typeof(Fnv1_32), Fnv1CryptoConfigId);
    }

    public HMACFnv1_32(byte[] key)
    {
        HashName = Fnv1CryptoConfigId;
        HashSizeValue = 32;
        Key = key;
    }
}

在.NET核心上,HMAC实现已经被移除,所有内置的HMAC类都会调用系统密码库来执行HMAC计算。因此,您需要自己编写HMAC,以便在.NET核心中使用自定义摘要。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45755659

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档