当前位置: 首页 > 面试题库 >

使用Java将RSA密钥对象导出到XML

曹泉
2023-03-14
问题内容

我已在Java中成功运行RSA加密/解密。这就是我生成密钥的方式。

        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(path));
        KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
        kpg.initialize(1024);
        KeyPair keypair = kpg.generateKeyPair();
        oos.writeObject(keypair);

但是现在我需要将我的系统与.Net代码集成在一起。是否可以将此KeyPair对象以以下格式导出为XML(因为.Net代码只能接受XML格式的键):

<RSAKeyValue>
    <Modulus>.....</Modulus>
    <Exponent>......</Exponent>
    <P>.....</P>
    <Q>....</Q>
    <DP>.......</DP>
    <DQ>......</DQ>
    <InverseQ>.........</InverseQ>
    <D>........</D>
</RSAKeyValue>

问题答案:

试试这个:

// key pair is in 'kp'
KeyFactory kf = KeyFactory.getInstance("RSA");
RSAPrivateCrtKeySpec ks = kf.getKeySpec(
    kp.getPrivate(), RSAPrivateCrtKeySpec.class);
System.out.println("<RSAKeyValue>");
System.out.println("    <Modulus>" + ks.getModulus() + "</Modulus>");
System.out.println("    <Exponent>" + ks.getPublicExponent() + "</Exponent>");
System.out.println("    <P>" + ks.getPrimeP() + "</P>");
System.out.println("    <Q>" + ks.getPrimeQ() + "</Q>");
System.out.println("    <DP>" + ks.getPrimeExponentP() + "</DP>");
System.out.println("    <DQ>" + ks.getPrimeExponentQ() + "</DQ>");
System.out.println("    <InverseQ>" + ks.getCrtCoefficient() + "</InverseQ>");
System.out.println("    <D>" + ks.getPrivateExponent() + "</D>");
System.out.println("</RSAKeyValue>");

这将对所有内部使用“ CRT”表示形式并允许导出的RSA密钥对起作用。在默认情况下,JDK将使用您显示的代码生成密钥对。

(在这里我打印出密钥,System.out而不是将其写入文件中,但是您明白了。)



 类似资料:
  • 问题内容: 因此,我正在使用Spongy Castle(Android)为RSA公钥生成PEM编码的字符串,并将其上传到服务器。这是我目前正在做的: 现在,您可能已经知道,我不确定如何构造或是否有更简单的方法来执行此操作。 当使用Bouncy Case时,我曾经这样做过 但是由于某种原因,海绵城堡中不存在PEMWriter类 问题答案: 好的,这可能不是最聪明的方法(或者也许是?),但是在检查了此

  • 问题内容: 我有.Net系统中xml格式的私钥和公钥。我必须使用此密钥在Java中执行加密/解密。有什么办法吗? 公钥看起来像这样: 私钥: 我已经写了一些代码来加密数据,但是我不确定它是否正确。 如何从xml制作私钥以解密数据? 问题答案: 在您的示例中,这是进行Base64解码吗?看起来您可能正在依赖它,并且依赖那些内部类通常不是一个好主意(例如,其他JVM不会拥有它)。您可以使用具有Base

  • 我有作为字符串的公钥和私钥,它们是由Webcrypto API RSA-OAEP算法生成的。我想加密和解密一些纯文本,使用这些和获得异常时,试图转换字符串到字节数组 Java代码: 例外情况: 线程“main”Java.lang.IllegalArgumentException中出现异常:Java.util.base64$Decoder.Decode0(base64.:714)Java.util.

  • 问题内容: 我正在编写一个用于传输文件的小型应用程序,或多或少地将其作为一种学习更多编程加密基础的方法。这个想法是生成一个RSA密钥对,交换公共密钥,并发送AES iv和密钥以进一步解密。我想用接收者的RSA公钥加密AES密钥,如下所示: 然后,我将密钥值写给接收器,并按如下方式解密: 在控制台的另一端,我将其作为输出: 此外,如果我创建一个大小为16的字节数组,并将cipher.doFinal(

  • 我生成了一个私人PKCS#12密钥,然后将其转换为PEM格式,并将其发送到iPhone应用程序。我想把这个私钥保存在iPhone钥匙链中。 首先,我删除了像“BEGIN RSA PRIVATE KEY”这样的标头。然后我将其其余部分转换为。然后,使用这样的代码: Swift中的CFDictionaryRef问题 我能够从这个私钥中获取。 现在我想知道如何使用将此插入钥匙串?

  • 我有两个不同的密钥对值,使用Javakeytools生成并存储在两个不同的文件中,称为keystore1.jks和keystore2.jks. 我所做的是从keystore2导入了密钥对。jks呼叫keystore1。jks通过下面的命令 我已经添加了密钥。jks到服务器使用这个密钥库监听ssl。 现在我已经从keystore2文件中导入了公钥。jks到名为truststore的信任库文件。jks