为什么 RSA `dofinal` 在 javacard 小程序中返回 `ILLEGAL_VALUE`?

问题描述 投票:0回答:1

我正在尝试使用 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 字节。

exception encryption rsa javacard
1个回答
0
投票

第一个也是最重要的一个是我们用公钥加密并用私钥解密。

还要注意,大多数 Java Card 实现都要求安全,而 RSA-512 绝对不被认为是安全的。破解 RSA-512 至少需要大约 2^30 次操作,这意味着 security(以位为单位)约为 30。因此,即使您切换到公钥(您应该这样做),JC 实现也可能会出错。

© www.soinside.com 2019 - 2024. All rights reserved.