使用HMACKey.setkey时获取Exception CryptoException.ILLEGAL值

时间:2018-10-25 09:08:23

标签: javacard hmacsha1

我想在JavaCard Applet中生成HMAC_SHA1签名

我正在尝试签名包含inBuffer字节数组S(字节数组,64字节)中的消息。下面给出了javacard(jc)applet模块的功能代码片段。我正在使用javacard3.0.1库开发jc applet。

 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,请指导我我做错了什么事

1 个答案:

答案 0 :(得分:3)

密钥长度以位指定-引用KeyBuilder.buildKey() documentation

  

keyLength-密钥大小(按位)。有效密钥位长度取决于密钥类型。上面的LENGTH_ *常量中列出了一些常见的密钥长度,例如LENGTH_DES。

意思是:

  • 使用512来获取64字节密钥

  • 使用64输入8字节密钥

请注意,您可以为HMAC-SHA1使用任何密钥长度,但是长于块大小的密钥(对于SHA-1,密钥为64字节)在使用之前会转换为其SHA-1哈希值(请参见here )。

祝您的项目好运!