ref: 8e6434d3fe106afc2bbb1982d9520723b8dbf7af
src/main/java/net/lulli/encrypt/Pems.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
package net.lulli.encrypt; import java.io.ByteArrayInputStream; import java.io.InputStream; import java.nio.file.Files; import java.nio.file.Paths; import java.security.KeyFactory; import java.security.PrivateKey; import java.security.PublicKey; import java.security.cert.CertificateFactory; import java.security.cert.X509Certificate; import java.security.spec.PKCS8EncodedKeySpec; import java.security.spec.X509EncodedKeySpec; import java.util.Base64; public class Pems { private Pems(){} public static X509Certificate readX509Certificate(String certificate) throws Exception { InputStream targetStream = new ByteArrayInputStream(certificate.getBytes()); return (X509Certificate) CertificateFactory .getInstance("X509") .generateCertificate(targetStream); } public static X509Certificate certificateFromFile(String fileName) { try { var keyContent = Files.readString(Paths.get(fileName)); return readX509Certificate(keyContent); } catch (Exception e) { throw new IllegalStateException(e.getMessage()); } } public static PublicKey publicKeyFromFile(String fileName) { try { var keyContent = Files.readString(Paths.get(fileName)); return readX509PublicKey(keyContent); } catch (Exception e) { throw new IllegalStateException(e.getMessage()); } } public static PrivateKey privateKeyFromFile(String fileName) { try { var keyContent = Files.readString(Paths.get(fileName)); return readPKCS8PrivateKey(keyContent); } catch (Exception e) { throw new IllegalStateException(e.getMessage()); } } public static PublicKey readX509PublicKey(String key) throws Exception { String publicKeyPEM = key .replace("-----BEGIN PUBLIC KEY-----", "") .replaceAll(System.lineSeparator(), "") .replace("-----END PUBLIC KEY-----", ""); byte[] encoded = Base64.getDecoder().decode(publicKeyPEM); KeyFactory keyFactory = KeyFactory.getInstance("RSA"); X509EncodedKeySpec keySpec = new X509EncodedKeySpec(encoded); return (PublicKey) keyFactory.generatePublic(keySpec); } public static PrivateKey readPKCS8PrivateKey(String key) throws Exception { String privateKeyPEM = key .replace("-----BEGIN PRIVATE KEY-----", "") .replaceAll(System.lineSeparator(), "") .replace("-----END PRIVATE KEY-----", ""); byte[] encoded = Base64.getDecoder().decode(privateKeyPEM); KeyFactory keyFactory = KeyFactory.getInstance("RSA"); PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(encoded); return (PrivateKey) keyFactory.generatePrivate(keySpec); } } |