寻找使用 ISO 9797-1 算法 3(零售 MAC)计算 Mac 的方法

looking for a way to calculate Mac using the ISO 9797-1 Algorithm 3(Retail MAC)

通过 Java 密码体系结构和代码示例,我学会了如何使用 Mac class 计算 Mac:

Mac mac = Mac.getInstance("HmacMD5");
mac.init(<secretKeyHere>);
byte[] macHash = mac.doFinal(<encryptedTextHere>); 

但我实际上正在寻找一种使用 ISO 9797-1 算法 3(零售 MAC)计算 Mac 的方法。

有人可以向我推荐 Java 中的代码示例吗?

我相信您想查看 javacard.security.Signature.getInstance(Signature.ALG_DES_MAC4_ISO9797_1_M2_ALG3),然后使用 init()update()sign() 方法生成该特定签名。

它是 not available in any 的 Oracle 提供程序,但是如果您添加 Bouncycastle 提供程序,那么 mac 算法将可用,例如

Security.addProvider(new BouncyCastleProvider()); 
Mac mac = Mac.getInstance("ISO9797ALG3MAC");

注意:Mac 算法已经过时了几十年。