【问题标题】:BigInteger to key ... Result is Key is too long for wrappingBigInteger to key ... 结果是 Key 太长,无法包装
【发布时间】:2014-09-22 09:00:25
【问题描述】:

我正在尝试将 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);

但是,结果是:Key is too long for wrapping

Exception in thread "main" java.security.InvalidKeyException: Key is too long for wrapping

我正在使用 keysize (2048),我尝试了 1024 和 512,但仍然出现相同的输出错误。

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

【问题讨论】:

  • 看看这个问题的答案:stackoverflow.com/questions/19856324/…
  • 感谢您的贡献,但是您提供的链接有不同的输出错误,无论如何我执行了解决方案中的步骤,但它并没有解决问题!
  • 似乎传递给 wrap() 方法的编码私钥比密码的密钥模数长。

标签: java key biginteger


【解决方案1】:

看起来这取决于 RSA 包装器的实现。 我在 init 调用中找到的 RSACipher 源使用 key.length() / 8 初始化内部缓冲区长度。 所以,如果 toBeWrappedKey.length() > 这个值,你就会得到一个异常。 此外,此代码使用 toBeWrappedKey.getEncoded(),因此如果 getEncoded 在某些提供程序的情况下返回 null,则会出现“无法获取编码密钥”异常。 例如,我生成了 512 个要导出的密钥大小,4096 个大小的导出密钥,然后 wrap 工作正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-23
    • 1970-01-01
    • 2014-02-13
    • 2022-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多