【问题标题】:Getting Exception CryptoException.ILLEGAL value when using HMACKey.setkey使用 HMACKey.setkey 时获取异常 CryptoException.ILLEGAL 值
【发布时间】:2018-10-25 09:08:22
【问题描述】:

我想在 JavaCard Applet 中生成 HMAC_SHA1 签名

我正在尝试签署包含 inBuffer 字节数组 S(字节数组,64 字节)中的消息。 javacard (jc) 小程序模块的函数的 sn-p 如下所示。我正在使用 javacard3.0.1 库来开发 jc 小程序。

 Signature m_sessionMAC = null;
 HMACKey keyType = null;


 // Create HMAC Key Used in Mac
 m_sessionMAC = Signature.getInstance(Signature.ALG_HMAC_SHA_1, false);

// Create HMAC Key Used in Mac
keyType = (HMACKey) KeyBuilder.buildKey(KeyBuilder.TYPE_HMAC, KeyBuilder.LENGTH_HMAC_SHA_256_BLOCK_64, false); 
keyType.setKey(S,(short) 0, (short) S.length);

这个 keyType.setKey 导致异常为 ILLEGAL_VALUE,请指导我做错了什么?

【问题讨论】:

    标签: javacard hmacsha1


    【解决方案1】:

    密钥长度以位为单位——引用KeyBuilder.buildKey() documentation

    keyLength - 以位为单位的密钥大小。有效的密钥位长度取决于密钥类型。一些常见的密钥长度列在上面的 LENGTH_* 常量中,例如 LENGTH_DES。

    这意味着:

    • 使用 512 获取 64 字节密钥

    • 使用 64 获取 8 字节密钥

    请注意,您可以为 HMAC-SHA1 使用任何密钥长度,但长度超过块大小(SHA-1 为 64 字节)的密钥在使用前会转换为它们的 SHA-1 哈希(参见例如here)。

    祝你的项目好运!

    【讨论】:

    • 非常感谢,我没有注意到它的大小。
    猜你喜欢
    • 2012-04-28
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 2021-05-04
    • 1970-01-01
    • 2022-08-07
    • 1970-01-01
    相关资源
    最近更新 更多