我正在尝试使用 RSA 私钥(64 字节长度)加密
TempBuffer
并将其发送到输出缓冲区:
rsaCipher = Cipher.getInstance(Cipher.ALG_RSA_PKCS1_OAEP, false);
rsaKey = new KeyPair(KeyPair.ALG_RSA,KeyBuilder.LENGTH_RSA_512);
rsaCipher.init(rsaKey.getPrivate(), Cipher.MODE_ENCRYPT);
len = rsaCipher.doFinal(SeedBuffer, (short)0, len_buffer, buffer, (short)0);
为什么最后一行返回
ILLEGAL_VALUE
CryptoException (0x0001)?
哪一项输入错误?
SeedBuffer
是一个 256 字节长度的缓冲区,用于维护秘密。
buffer
有足够的长度,因为 apdu.setIncommingAndReceive() 之前已执行。
len_buffer
的值为 0x40,表示长度为 64 字节。
第一个也是最重要的一个是我们用公钥加密并用私钥解密。
还要注意,大多数 Java Card 实现都要求安全,而 RSA-512 绝对不被认为是安全的。破解 RSA-512 至少需要大约 2^30 次操作,这意味着 security(以位为单位)约为 30。因此,即使您切换到公钥(您应该这样做),JC 实现也可能会出错。