2

我正在使用以下代码获取 AESCMAC

Mac mac = Mac.getInstance("aescmac", new BouncyCastleProvider());
mac.init(k_mac );
byte[] tooLong = mac.doFinal(tmp);

doFinal 将生成一个大小为 16 的字节数组,但我希望它为 8 个字节长。我看到有一个方法 getMacLength() 返回 16 但没有 setMacLength 方法。谢谢你的帮助

4

3 回答 3

3

根据 NIST 800-38B 第 6.2 章(MAC 生成)第 7 步,要生成 N 位 MAC,您只需获取 N 个最高有效位。附录 A.2 讨论了使用缩短 MAC 的后果。

于 2013-07-04T13:51:35.350 回答
1

AES-CMAC 产生一个 128 位 MAC(参见https://www.rfc-editor.org/rfc/rfc4493),即 16 个字节。如果您想要一个 8 字节的 MAC,请选择产生 64 位 MAC 的算法。

您需要 64 位而不是 128 位 MAC有什么特别的原因吗?

于 2011-10-05T09:32:23.683 回答
-1

我不认为你可以减少长度。信息长16个字节;你不能在不丢失信息的情况下缩短它。

于 2011-10-05T09:21:42.787 回答