Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>There's no support for this out of the box in Java, but it's still fairly trivial. First off, you generate an RSA key pair using the JCA <code>KeyPairGenerator</code>. </p> <p>Then, you need to cast the private key to the appropriate interface (we use <code>RSAPrivateCrtKey</code> instead of <code>RSAPrivateKey</code> so we can access the CRT parts), and using Apache Commons Codec for Base64 encoding. </p> <pre><code>public static void main(String[] args) throws Exception { KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA"); KeyPair keyPair = keyPairGen.genKeyPair(); RSAPrivateCrtKey privKey = (RSAPrivateCrtKey) keyPair.getPrivate(); BigInteger n = privKey.getModulus(); BigInteger e = privKey.getPublicExponent(); BigInteger d = privKey.getPrivateExponent(); BigInteger p = privKey.getPrimeP(); BigInteger q = privKey.getPrimeQ(); BigInteger dp = privKey.getPrimeExponentP(); BigInteger dq = privKey.getPrimeExponentQ(); BigInteger inverseQ = privKey.getCrtCoefficient(); StringBuilder builder = new StringBuilder(); builder.append("&lt;RSAKeyValue&gt;\n"); write(builder, "Modulus", n); write(builder, "Exponent", e); write(builder, "P", p); write(builder, "Q", q); write(builder, "DP", dp); write(builder, "DQ", dq); write(builder, "InverseQ", inverseQ); write(builder, "D", d); builder.append("&lt;/RSAKeyValue&gt;"); System.out.println(builder.toString()); } private static void write(StringBuilder builder, String tag, BigInteger bigInt) { builder.append("\t&lt;"); builder.append(tag); builder.append("&gt;"); builder.append(encode(bigInt)); builder.append("&lt;/"); builder.append(tag); builder.append("&gt;\n"); } private static String encode(BigInteger bigInt) { return new String(Base64.encodeInteger(bigInt), "ASCII"); } </code></pre> <p>You can use a proper XML API if you're so inclined, but I felt no compelling reason not to use <code>StringBuilder</code> in this case. Also, feel free to inline the <code>BigInteger</code> instances. I declared them as variables to make the mapping between Java methods and XML elements more obvious.</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload