Java Card加密异常RSA密钥加密

时间:2015-02-19 17:29:05

标签: java encryption key javacard

我尝试在Java卡上重新创建公钥并用它来加密某些数据。

以下是构建我正在使用的公钥的代码:

rsaPublicId = (RSAPublicKey) KeyBuilder.buildKey(KeyBuilder.TYPE_RSA_PUBLIC, KeyBuilder.LENGTH_RSA_2048, false);
rsaPublicId.setExponent(rsaExponent, (short) 0, (short) rsaExponent.length);
rsaPublicId.setModulus(rsaPublicModulus, (short) 12, (short) ((short) rsaPublicModulus.length - (short) 12));

cipherId.init(rsaPublicId, Cipher.MODE_ENCRYPT);

当我尝试加密数据时,我使用以下代码:

cipherId.doFinal(serviceBytes, (short) 0, (short) 16, buffer, (short) 0);

但它发生了一个javacard.security.cryptoException,其详细信息为" null"

cipherId = Cipher.getInstance(Cipher.ALG_RSA_PKCS1, false);

模数设置为308,用Java创建并发送到卡片。

3 个答案:

答案 0 :(得分:2)

您的模数应与buildKey调用期间设置的完全相同。因此,如果你的大小是308(308 是什么?)那么你的密钥要么太小(以位为单位)要么太大(如果以字节为单位指定)。

如果允许使用更小的键(最多一个,308位太小),这是讨论的主题。但是在当前的规范中,不允许使用比方法调用中给出的更小的密钥;键 - 以及模数 - 需要是指定的确切大小。

答案 1 :(得分:0)

也许模数的长度不等于2048位,可能会抛出ILLEGAL_USE。

答案 2 :(得分:-1)

你的算法错了

cipherId = Cipher.getInstance(Cipher.ALG_RSA_PKCS1, false);

请尝试

cipherId = Cipher.getInstance(Cipher.ALG_RSA_NOPAD, false);