Java

时间:2017-08-22 01:41:17

标签: java encryption cryptography smartcard javacard

如果这可能超出主题,我很抱歉,但是有人可以帮我定义Java中与Java Card中的ALG_DES_MAC8_ISO9797_M1具有类似计算的算法。加密模式下的DES / CBC / NoPadding不会给我相同的结果。不幸的是,在目前的情况下,我无法改变Applet方面的算法,我需要找到具有类似计算的java算法来创建测试工具。谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

ISO / IEC 9797的方法1指定零填充。 M1填充的问题是当块已经是块大小的倍数时,不执行填充。

这有两个结果:以位(或通常为:字节)设置为零结束的明文将删除那些零(至少达到密码的块大小);这意味着对于可能以字节设置为零结束的消息,填充非确定性

另一个结果是没有Java提供商似乎支持它。我与Bouncy Castle的Dave进行了长时间的交谈,我们决定BC也不需要支持。基本上,您必须使用"NoPadding",然后从结果明文的末尾手动删除设置为零的字节。

大多数填充模式总是 pad。因此,实现填充模式是非常棘手的,其中填充可能不会发生。对于Bouncy来说肯定是这种情况,需要重写填充接口。

如果你弄错了:Bouncy Castle支持位填充(9797 M2):它在那里被称为ISO_7816d4填充,因为它也被指定用于智能卡。

你已经指出这种填充MAC模式似乎很奇怪。这意味着MAC将使用非确定性填充,而通常使用确定性填充(位填充)。

我认为这也不会实现。你正在尝试一个密码,所以我认为MAC部分是一个错误。