Java 卡加密异常 RSA 密钥加密
Java Card Crypto Exception RSA Key Encryption
我正在尝试在 Java 卡上重新创建一个 public 密钥并用它来加密一些数据。
这是构建我正在使用的 public 密钥的代码:
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创建并发送到卡中。
你的算法错了
cipherId = Cipher.getInstance(Cipher.ALG_RSA_PKCS1, false);
请尝试
cipherId = Cipher.getInstance(Cipher.ALG_RSA_NOPAD, false);
您的模数应与 buildKey
调用期间设置的大小完全相同。因此,如果您的大小是 308(308 what?),那么您的密钥要么太小(以位为单位),要么太大(如果以字节为单位指定)。
是否允许使用更小的密钥(达到某个最小值,308 位太小)是一个讨论主题。然而,在当前规范中,不允许使用比方法调用中给定的键更小的键;键 - 以及模数 - 需要是指定的确切大小。
可能Modulus的长度不等于2048bits,可能抛出ILLEGAL_USE
我正在尝试在 Java 卡上重新创建一个 public 密钥并用它来加密一些数据。
这是构建我正在使用的 public 密钥的代码:
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创建并发送到卡中。
你的算法错了
cipherId = Cipher.getInstance(Cipher.ALG_RSA_PKCS1, false);
请尝试
cipherId = Cipher.getInstance(Cipher.ALG_RSA_NOPAD, false);
您的模数应与 buildKey
调用期间设置的大小完全相同。因此,如果您的大小是 308(308 what?),那么您的密钥要么太小(以位为单位),要么太大(如果以字节为单位指定)。
是否允许使用更小的密钥(达到某个最小值,308 位太小)是一个讨论主题。然而,在当前规范中,不允许使用比方法调用中给定的键更小的键;键 - 以及模数 - 需要是指定的确切大小。
可能Modulus的长度不等于2048bits,可能抛出ILLEGAL_USE