HMACContext

Inherits: Reference < Object

用来为一个使用密钥的信息创建 HMAC。

描述

HMACContext 类对于高级的 HMAC 用例非常有用,例如流式消息,因为它支持在一段时间内创建消息,而不是一次性提供。

extends Node
var ctx = HMACContext.new()

func _ready():
    var key = "supersecret".to_utf8()
    var err = ctx.start(HashingContext.HASH_SHA256, key)
    assert(err == OK)
    var msg1 = "this is ".to_utf8()
    var msg2 = "vewy vewy secret".to_utf8()
    err = ctx.update(msg1)
    assert(err == OK)
    err = ctx.update(msg2)
    assert(err == OK)
    var hmac = ctx.finish()
    print(hmac.hex_encode())

而在 C# 中,我们可以使用下面的方法。

using Godot;
using System;
using System.Diagnostics;

public class CryptoNode : Node
{
    private HMACContext ctx = new HMACContext();
    public override void _Ready()
    {
        PoolByteArray key = String("supersecret").to_utf8();
        Error err = ctx.Start(HashingContext.HASH_SHA256, key);
        GD.Assert(err == OK);
        PoolByteArray msg1 = String("this is ").to_utf8();
        PoolByteArray msg2 = String("vewy vew secret").to_utf8();
        err = ctx.Update(msg1);
        GD.Assert(err == OK);
        err = ctx.Update(msg2);
        GD.Assert(err == OK);
        PoolByteArray hmac = ctx.Finish();
        GD.Print(hmac.HexEncode());
    }
}

注意:在 HTML5 导出中不可用。

方法说明

返回生成的 HMAC。如果 HMAC 失败,将返回一个空的 PoolByteArray


初始化 HMACContext。在 finish 被调用之前,不能在同一个 HMACContext 上再次调用此方法。


更新要进行 HMAC 的消息。在调用 finishdata 追加到消息中之前,可以多次调用,但在调用 start 之前不能调用。