我想在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,请指导我我做错了什么事
答案 0 :(得分:3)
密钥长度以位指定-引用KeyBuilder.buildKey() documentation:
keyLength-密钥大小(按位)。有效密钥位长度取决于密钥类型。上面的LENGTH_ *常量中列出了一些常见的密钥长度,例如LENGTH_DES。
意思是:
使用512
来获取64字节密钥
使用64
输入8字节密钥
请注意,您可以为HMAC-SHA1使用任何密钥长度,但是长于块大小的密钥(对于SHA-1,密钥为64字节)在使用之前会转换为其SHA-1哈希值(请参见here )。
祝您的项目好运!