有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何将Java证书文件写入Json字符串字段?

我正在尝试生成一个JSON文件,其中包含传输和在另一个系统上执行进一步操作所需的所有信息。其中一个字段是java证书。因为我只需要在另一个系统上复制文件的内容,所以我认为直接读取内容然后写入文件就可以了。但在加载新编写的文件时,我得到:

Caused by: java.io.IOException: Invalid keystore format
    at sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:658)
    at sun.security.provider.JavaKeyStore$JKS.engineLoad(JavaKeyStore.java:56)
    at sun.security.provider.KeyStoreDelegator.engineLoad(KeyStoreDelegator.java:224)
    at sun.security.provider.JavaKeyStore$DualFormatJKS.engineLoad(JavaKeyStore.java:70)
    at java.security.KeyStore.load(KeyStore.java:1445)

这样做的正确方法是什么

目前,为了阅读我使用的原始证书:

FileUtils.readFileToString(originalTrustFile);

要编写我正在使用的新文件,请执行以下操作:

FileUtils.writeByteArrayToFile(trustFile, trustJsonContent.getBytes());

共 (1) 个答案

  1. # 1 楼答案

    尽管在一些JSON文件中嵌入密钥库的想法对我来说很奇怪,但下面您可以找到一种将二进制数据作为字符串放入JSON字段或从JSON字段中检索二进制数据的正确方法

    import java.util.Base64; //for Java 8
    import org.apache.commons.io.FileUtils;
    
    //encode to Base64
    byte[] binaryFileBytes = FileUtils.readFileToByteArray(originalTrustFile);
    String jsonFieldValue = Base64.getEncoder().encodeToString(binaryFileBytes);
    
    //decode from Base64     
    String jsonFieldValue = ... //obtain from your JSON
    byte[] binaryFileBytes = Base64.getDecoder().decode(jsonFieldValue);
    FileUtils.writeByteArrayToFile(trustFile, binaryFileBytes);
    

    与您最初的方法相反,上面的方法将生成保证安全的字符串,该字符串不会干扰JSON保留符号,因此在转义或反序列化时不会损坏

    注意1:对于Java 7和更早版本,您需要在类路径中使用apache commons编解码器库,并使用非常类似的org.apache.commons.codec.binary.Base64。请咨询javadoc如何使用它,请参阅方法encodeBase64String(byte[])decodeBase64(String)

    注意2Base64 format会使二进制数据的初始大小增加+33%的开销,因此对于相当大的文件必须谨慎使用