Java 从字符串中删除 public 键 header 和页脚

Java remove public key header and footer from string

您好,我正在尝试删除存储为字符串的 public 键的 header 和页脚。我设法通过删除第一个 "\n",

之前的所有内容来解决如何删除 "begin" header
-----BEGIN PUBLIC KEY-----\n

使用此代码。

String s1 = pKey.substring(pKey.indexOf("\n")+1);

然而,我正在努力删除从末尾到最后一个“\n”的页脚。

\n-----END PUBLIC KEY-----

必须有更简洁的方法来删除它们。

您可以使用

String s1 = pKey.replaceAll("^.*\n|\n-+END PUBLIC KEY-+$", "");

正则表达式详细信息

  • ^.*\n - 字符串的开头和带有换行符的第一行
  • | - 或
  • \n-+END PUBLIC KEY-+$ - 换行符后跟 1+ - 个字符,然后是 END PUBLIC KEY 和一个或多个连字符,直到字符串结尾。

Public key 可以是 Some thing like this "-----BEGIN PUBLIC KEY----\nkey\n-----END PUBLIC KEY-----"

所以要从字符串中删除页眉和页脚,您可以使用 pKey.substring(pKey.indexOf("\n")+1, pKey.lastIndexOf("\n"));

或其他方式直接用 empty 替换页眉和页脚,因为它不会出现在 key

我一直在使用以下 util 方法从文本中解析 RSA public 密钥:

public static RSAPublicKey parsePKCS8PublicKey(String publicKey) {
    publicKey = publicKey
            .replace("-----BEGIN PUBLIC KEY-----", "")
            .replace("-----END PUBLIC KEY-----", "")
            .replace("\n", "")
            .trim();
    byte[] bytes = Base64.getDecoder().decode(publicKey);
    X509EncodedKeySpec keySpec = new X509EncodedKeySpec(bytes);
    try {
        KeyFactory keyFactory = KeyFactory.getInstance("RSA");
        return (RSAPublicKey) keyFactory.generatePublic(keySpec);
    } catch (GeneralSecurityException e) {
        throw new IllegalArgumentException(e);
    }
}