我试图将BigInteger privateKey转换为KEY,我找到了这段代码并进行了一些修改:
KeyFactory factory = KeyFactory.getInstance("RSA");
RSAPrivateKeySpec spec;
spec = new RSAPrivateKeySpec(modulus,privateKey);
RSAPrivateKey priPEM = (RSAPrivateKey) factory.generatePrivate(spec);
Cipher enc = Cipher.getInstance("RSA");
enc.init(Cipher.WRAP_MODE, priPEM);
byte[] encryptedKey = enc.wrap(priPEM);
然而,结果是:密钥太长而无法包装
Exception in thread "main" java.security.InvalidKeyException: Key is too long for wrapping
我正在使用密码(2048),我已经尝试了1024和512,但输出错误仍然相同。
关于如何摆脱这个错误的任何想法?
答案 0 :(得分:0)
看起来像这样取决于RSA包装器的实现。 我在init调用中发现的RSACipher源使用key.length()/ 8初始化内部缓冲区的长度。 因此,如果toBeWrappedKey.length()>此值,则会得到异常。 而且,此代码使用toBeWrappedKey.getEncoded(),因此,如果在某些提供程序的情况下getEncoded返回null,则将收到“无法获取编码的密钥”异常。 作为示例,我生成了要导出的512个密钥大小,导出了4096个大小的导出密钥,并且包装效果很好。