0

我正在尝试用 iv 计算 HMAC(没有任何额外的密钥)。我需要在“初始化”级别传递它。我知道通常不需要传递 iv,因为 hmac/sha 有默认的 iv。但是,如果我不想使用默认值,并且想提供我自己的 iv,那么如何在 java 中实现呢?我试过使用 javax,但它的 MAC init 只接受签名密钥。

例如:

Mac hmac = Mac.getInstance("HmacSHA1");
byte[] hmacKeyBytes = key.getBytes();
SecretKeySpec secretKey = new SecretKeySpec(hmacKeyBytes, "HmacSHA1");
hmac.init(secretKey);
  • 我想用一些 iv 值来初始化。但不知道如何。

我指的是用于启动 hash/hmac 迭代过程的初始值。通常它是一些任意的数字,不会暴露给用户。我希望能够更改散列函数的默认初始化向量/找到一些方法来提供我自己的 iv。我该怎么做?

谢谢!

4

2 回答 2

1

HMAC 只采用初始参数作为密钥。有效 - 相同的内容应该具有相同的身份验证标签,因此根据定义不需要/不需要 IV。

据我回忆,具有非静态 IV 的密码学类会导致某些算法实现的 MAC/HMAC 漏洞,但我不再记得细节了(你可以在 stackoverflow https://crypto的密码学部分询问.stackexchange.com/)。

如果您真的想要某种 IV,您仍然可以将 IV 预先添加到内容中。

于 2017-06-13T08:17:21.463 回答
0
于 2017-06-20T21:35:30.357 回答