我正在使用以下代码获取AESCMAC
Mac mac = Mac.getInstance("aescmac", new BouncyCastleProvider());
mac.init(k_mac );
byte[] tooLong = mac.doFinal(tmp);
doFinal将生成一个大小为16的字节数组,但我希望它长8个字节。我看到有一个方法getMacLength()返回16但没有setMacLength方法。 感谢您的帮助
答案 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个字节;你不能在不丢失信息的情况下缩短它。