javacard - 使用 HMACKey.setkey 时获取异常 CryptoException.ILLEGAL 值
问题描述
我想在 JavaCard Applet 中生成 HMAC_SHA1 签名
我正在尝试签署一条包含 inBuffer 字节数组 S(字节数组,64 字节)中的消息。javacard (jc) 小程序模块的函数片段如下所示。我正在使用 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,请指导我我做错了什么?
解决方案
密钥长度以位指定——引用KeyBuilder.buildKey() 文档:
keyLength -以位为单位的密钥大小。有效的密钥位长度取决于密钥类型。一些常见的密钥长度在上面的 LENGTH_* 常量中列出,例如 LENGTH_DES。
意思是:
用于
512
64 字节密钥用于
64
8 字节密钥
请注意,您可以为 HMAC-SHA1 使用任何密钥长度,但长度超过块大小(SHA-1 为 64 字节)的密钥在使用前会转换为它们的 SHA-1 哈希(参见例如此处)。
祝你的项目好运!
推荐阅读
- javascript - 如何从 fetch javascript 请求的响应中获取数据
- modeling - 谓词不一致
- javascript - 更改属性会中断其他功能
- python - 用 pd.read_sql_query 声明变量
- pine-script - Pine Script 中的 Tradingview 策略头寸大小不起作用
- python - 从其他 df 映射特定值
- html - 变量在对象内外得到不同的结果
- python - FileNotFound : [WinError 2] The system cannot find the file specified” Error while using selenium
- firebase - Flutter-Firestore“参数类型'Map
Function()' 不能分配给参数类型'Map " - javascript - querySelector 无法访问传递的 id