[英]How can I construct a java.security.PublicKey object from a base64 encoded string?
[英]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();
}
}
问题是双重的。
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.