繁体   English   中英

如何从 base64 编码的字符串创建信任库?

[英]How can I create a truststore from a base64 encoded String?

我有一个编码为 base64 的字符串,我需要获取这个字符串,对其进行解码并创建一个信任库文件,但是当我这样做时,最终文件无效。 这是我的代码:

public static void buildFile() {
    String exampleofencoded = "asdfasdfasdfadfa";
    File file = new File("folder/file.jks");
    try (FileOutputStream fos = new FileOutputStream(file);
            BufferedOutputStream bos = new BufferedOutputStream(fos);
            DataOutputStream dos = new DataOutputStream(bos))
    {
        Base64.Decoder decoder = Base64.getDecoder();
        String decodedString =new String(decoder.decode(exampleofencoded).getBytes());
        dos.writeBytes(decodedString);
    }
    catch (IOException e) {
        System.out.println("Error creating file");
    }
    catch(NullPointerException e) {
        System.out.println(e.getMessage();
    }
}

问题是双重的。

  1. 您正在将 byte[] 数组转换为 String,这对于大多数字符集(可能 iso-8859-1 除外)的实际二进制数据来说是一种有损操作。
  2. 您正在使用DataOutputStream ,它不是通用的 output stream,而是用于原始类型的特定序列化格式。 特别是它的writeBytes方法有一个重要的警告( “字符串中的每个字符都是通过丢弃其高八位按顺序写出的。” ),这也是为什么只使用 iso-8859-1 可能有效的另一个原因.

相反,将字节数组直接写入文件

public static void buildFile() {
    String exampleofencoded = "asdfasdfasdfadfa";
    File file = new File("folder/file.jks");
    try (FileOutputStream fos = Files.newOutputStream(file.toPath()) {
        Base64.Decoder decoder = Base64.getDecoder();
        byte[] decodedbytes = decoder.decode(exampleofencoded);
        fos.write(decodedbytes);
    } catch (IOException e) {
        System.out.println("Error creating file");
    }
}

顺便说一句,您不应该在代码中捕获NullPointerException ,它几乎总是可以通过仔细编程和/或输入验证来避免的问题。 我通常也会建议不要在这里捕获IOException并只打印它。 最好也传播该异常,并让调用者处理它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM