【问题标题】:Implement a RSA algorithm in Java在 Java 中实现 RSA 算法
【发布时间】:2011-02-12 02:36:36
【问题描述】:

我想实现一个RSA algorithm 来加密图像(byte[])。为了生成我的两个密钥,我使用了这段代码:

KeyPairGenerator keygen = KeyPairGenerator.getInstance("RSA");
keygen.initialize(512);
keyPair = keygen.generateKeyPair();

一旦生成了公钥和私钥,我想将它们展示给用户,以便他可以分发公钥并使用私钥进行解码。我怎样才能取回这些密钥?

使用keygen.getPrivateKey()keygen.getPublicKey() 给我RSA算法的所有信息,而不仅仅是我需要的密钥。

谢谢

【问题讨论】:

    标签: java algorithm key rsa


    【解决方案1】:

    您可以使用Key.getEncoded() 来获取密钥的字节数。

    【讨论】:

      【解决方案2】:

      通过 Relevant KeySpec 类,您可以调用 getModulus() 和 getPublicExponent()/getPrivateExponent() 方法来提取关键组件:

      KeyFactory fact = KeyFactory.getInstance("RSA");
      RSAPublicKeySpec pub = fact.getKeySpec(kp.getPublic(),
        RSAPublicKeySpec.class);
      RSAPrivateKeySpec priv = fact.getKeySpec(kp.getPrivate(),
        RSAPrivateKeySpec.class);
      
      saveToFile("public.key", pub.getModulus(),
        pub.getPublicExponent());
      saveToFile("private.key", priv.getModulus(),
        priv.getPrivateExponent());
      

      如果它有用,我不久前写了几篇文章来处理 RSA encryption in Java 的一些细节(以及一般基于 Java 的密码学。

      【讨论】:

      • 非常感谢,您的文章对我帮助很大。
      【解决方案3】:

      您发布的内容没有任何意义,因为 getPublicKey() 和 getPrivateKey() 会返回您所说的所需内容。但是,如果您想提取组件,您应该简单地将您的 PublicKey 和 PrivateKey 转换为 RSAPublicKey 和 RSAPrivateKey,而不是通过使用 KeySpecs 的繁琐。

      此外,您很快就会发现,您的计划无法使用 RSA 加密任何大于 501 字节的内容,这对图像几乎没有用处。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-02
        • 1970-01-01
        • 1970-01-01
        • 2019-04-02
        • 2023-03-15
        • 1970-01-01
        相关资源
        最近更新 更多