如何在java jce / jca中设置消息认证码的长度

时间:2011-10-05 09:19:01

标签: java bouncycastle jce jca

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

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

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

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

AES-CMAC产生128位MAC(参见http://tools.ietf.org/html/rfc4493),即16字节。如果你想要一个8字节的mac,选择一个产生64位MAC的算法。

为什么你想要一个64位而不是一个128位的MAC有什么特别的原因吗?

答案 2 :(得分:0)

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