我正在使用以下代码获取 AESCMAC
Mac mac = Mac.getInstance("aescmac", new BouncyCastleProvider());
mac.init(k_mac );
byte[] tooLong = mac.doFinal(tmp);
doFinal 将生成一个大小为 16 的字节数组,但我希望它为 8 个字节长。我看到有一个方法 getMacLength() 返回 16 但没有 setMacLength 方法。谢谢你的帮助
我正在使用以下代码获取 AESCMAC
Mac mac = Mac.getInstance("aescmac", new BouncyCastleProvider());
mac.init(k_mac );
byte[] tooLong = mac.doFinal(tmp);
doFinal 将生成一个大小为 16 的字节数组,但我希望它为 8 个字节长。我看到有一个方法 getMacLength() 返回 16 但没有 setMacLength 方法。谢谢你的帮助
根据 NIST 800-38B 第 6.2 章(MAC 生成)第 7 步,要生成 N 位 MAC,您只需获取 N 个最高有效位。附录 A.2 讨论了使用缩短 MAC 的后果。
AES-CMAC 产生一个 128 位 MAC(参见https://www.rfc-editor.org/rfc/rfc4493),即 16 个字节。如果您想要一个 8 字节的 MAC,请选择产生 64 位 MAC 的算法。
您需要 64 位而不是 128 位 MAC有什么特别的原因吗?
我不认为你可以减少长度。信息长16个字节;你不能在不丢失信息的情况下缩短它。