ISO9797Alg3Mac使用返回‘java.lang.IllegalArgumentException: params must be an instance of KeyParameter‘

小结

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

问题

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

ISO9797 Algorithm 3 MAC也被称为Retail MAC,具体计算方法的示意图如下:
ISO9797Alg3
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 Note
Github: core/src/test/java/org/bouncycastle/crypto/test/ISO9797Alg3MacTest.java
Github: core/src/main/java/org/bouncycastle/crypto/macs/ISO9797Alg3Mac.java

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值