ISO9797Alg3Mac使用返回‘java.lang.IllegalArgumentException: params must be an instance of KeyParameter‘
  wHsz5gF329ep 2023年11月02日 66 0



文章目录

  • 小结
  • 问题
  • 解决
  • 参考


小结

在Java程序中使用ISO9797Alg3Mac算法,返回了错误java.lang.IllegalArgumentException: params must be an instance of KeyParameter,进行了解决。

问题

Bouncy Castle Crypto APIs提供了进行加解密的接口API,引入到工程中后,可以方便地使用其提供的接口进行加解密运算。

ISO9797 Algorithm 3 MAC也被称为Retail MAC,具体计算方法的示意图如下:

ISO9797Alg3Mac使用返回‘java.lang.IllegalArgumentException: params must be an instance of KeyParameter‘_开发语言


Bouncy Castle Crypto APIs提供了使用方法:

Github: ISO9797Alg3Mac示例

我使用了以下代码:

public static int TDES_RetailMACWithIV(byte[] key, byte[] in, byte[] output, byte[] iv) {
		ISO9797Alg3Mac triple_des = new ISO9797Alg3Mac(new DESEngine(), new ISO7816d4Padding());
		ParametersWithIV keyAndIv = new ParametersWithIV(new KeyParameter(key), iv);
		triple_des.init(keyAndIv);
		triple_des.update(in, 0, in.length);
		triple_des.doFinal(output, 0);

		return triple_des.getMacSize();
	}

以上程序在执行到triple_des.init(keyAndIv);时会抛异常,内容为:java.lang.IllegalArgumentException: params must be an instance of KeyParameter

解决

经过调试,是我使用的Bouncy Castle Crypto APIs的版本问题,现使用的版本:Release: 1.45, 升级到Release: 1.66,问题解决。

注意:在使用ISO9797 Algorithm 3 MAC算法时,即使数据长度是8的整数倍,也需要在数据后添加填充字节再进行运算,例如:

0102030405060708需要填充为010203040506070880000000000000

参考

The Legion of the Bouncy Castle: Release NoteGithub: core/src/test/java/org/bouncycastle/crypto/test/ISO9797Alg3MacTest.javaGithub: core/src/main/java/org/bouncycastle/crypto/macs/ISO9797Alg3Mac.java


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  2Vtxr3XfwhHq   2024年05月17日   53   0   0 Java
  Tnh5bgG19sRf   2024年05月20日   109   0   0 Java
  8s1LUHPryisj   2024年05月17日   46   0   0 Java
  aRSRdgycpgWt   2024年05月17日   47   0   0 Java
wHsz5gF329ep