BigInteger to key ...结果是Key太长了包装

时间:2014-09-22 09:00:26

标签: java key biginteger

我试图将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,但输出错误仍然相同。

关于如何摆脱这个错误的任何想法?

1 个答案:

答案 0 :(得分:0)

看起来像这样取决于RSA包装器的实现。 我在init调用中发现的RSACipher源使用key.length()/ 8初始化内部缓冲区的长度。 因此,如果toBeWrappedKey.length()>此值,则会得到异常。 而且,此代码使用toBeWrappedKey.getEncoded(),因此,如果在某些提供程序的情况下getEncoded返回null,则将收到“无法获取编码的密钥”异常。 作为示例,我生成了要导出的512个密钥大小,导出了4096个大小的导出密钥,并且包装效果很好。