在Java中将RSA密钥对象导出为XML

dvl*_*dvl 8 java xml encryption rsa key

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

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

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

<RSAKeyValue>
    <Modulus>.....</Modulus>
    <Exponent>......</Exponent>
    <P>.....</P>
    <Q>....</Q>
    <DP>.......</DP>
    <DQ>......</DQ>
    <InverseQ>.........</InverseQ>
    <D>........</D>
</RSAKeyValue>
Run Code Online (Sandbox Code Playgroud)

Tho*_*nin 15

试试这个:

// 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>");
Run Code Online (Sandbox Code Playgroud)

这适用于内部使用"CRT"表示的所有RSA密钥对,并允许导出; 这是JDK默认使用您显示的代码生成的密钥对的情况.

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